Поиск Laravel по внешнему ключу из другой таблицы - PullRequest
1 голос
/ 12 июня 2019

У меня есть три таблицы сообщений: пользователь и страна. Сообщение сохраняется пользователем из страны. Теперь я хочу искать все сообщения всех пользователей из страны.

, поэтому пользователь будет фильтровать по стране, и я получу код страны из окна поиска на контроллер $request->input($country);

Вот мои модельные отношения:

ПОЧТОВАЯ МОДЕЛЬ:

class Post extends Model
{
    protected $table = 'posts';

    protected $dates = ['status_change'];

    public function photos()
    {
        return $this->hasMany(Photo::class,'post');
    }

    public function make_rel()
    {
        return $this->belongsTo(Make::class, 'make_id' ,'id','make_logo');
    }

    public function user_rel()
    {
        return $this->belongsTo(User::class, 'created_by' ,'id');
    }

}

СТРАНОВАЯ МОДЕЛЬ:

class Country extends Model
{
    public function users(){
        return $this->hasMany('App\User');
    }
}

МОДЕЛЬ ПОЛЬЗОВАТЕЛЯ:

class User extends Authenticatable
{


    public function country_rel()
    {
        return $this->belongsTo(Country::class, 'country' ,'country_code');
    }
}

ФУНКЦИЯ ПОИСКА

public function search(Request $request)
{
    $this->validate($request, [
        'country' => 'required',
    ]);

    $country = Country::where('country_name',$request->input('country'))->get();
    $data = Post::where('created_by',$country->user_rel->name)
    ->get();
    dd($data);
}

Это не работает. Кто-нибудь может посоветовать, что я делаю не так?

1 Ответ

3 голосов
/ 12 июня 2019

Я бы использовал hasManyThrugh . Документация даже использует ваш точный вариант использования:


    class Country extends Model
    {
        public function users(){
            return $this->hasMany('App\User');
        }

        public function posts() {
            return $this->hasManyThrough(
                'App\Post',
                'App\User',
                'country_id', // Foreign key on users table...
                'user_id', // Foreign key on posts table...
                'id', // Local key on countries table...
                'id' // Local key on users table...
            );
        }

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...