Как передать переменную в функции в Laravel

#php #laravel #eloquent #laravel-relations

Вопрос:

Я хотел бы знать, как передать переменную внутри with функции. Код выглядит следующим образом:

Здесь у нас есть код контроллера:

 $id = 2;

$user = User::where('userToken', '=', $token)
    ->with('userPost($id)')
    ->first();
 

И вот у нас есть код модели:

 public function userPost($id) {
    return $this->hasMany(PostPhotos::class, 'user_id', 'id')
        ->with(['getlikes' => function($q) use ($id) {
            $q->where('likeStatus', '=', 'like');
            $q->where('userclick_id', '=', $id);
        }]);
}
 

Не могли бы вы, пожалуйста, помочь мне в этом?

Комментарии:

1. попробуйте сначала изменить отношение, как показано ниже, публичная функция UserPost(){ возвращает $this->hasMany(PostPhotos::класс,’идентификатор пользователя’,’идентификатор’); } Затем в запросе $user = User::where(‘userToken’,’=’,$token)->>with([‘userPost’,’userPost.getlikes’])->>>whereHas(‘userPost.getlikes’,function($query)используйте ($id){ $q->>>>где(‘likeStatus’, ‘=’, ‘нравится’); $q->>>>>где(‘userclick_id’, ‘=’, $id); })->>>>>>первый(); это

2. отношения не зависят от конкретного экземпляра (без определенного идентификатора), поэтому вам не следует привязывать их к одному экземпляру. Найдите другое решение. Может быть, объяснить подробнее все отношения на работе здесь и результат, которого вы ожидаете ?

Ответ №1:

Ваша логика ложна. Потому with что функция используется для отображения отношений. В модели вы должны показывать только отношения как belongsTo или oneToMany . Но вы можете достичь своей цели с помощью прицелов. Просто вам нужно провести исследование отсюда: https://laravel.com/docs/8.x/eloquent#query-scopes