Laravel基于来自不同表的外键搜索

时间:2019-06-12 17:33:06

标签: laravel laravel-5.8

我有三个表格,分别是用户和国家。 帖子由来自某个国家的用户保存。 现在,我要搜索一个国家/地区所有用户的所有帖子。

因此用户将按国家/地区进行过滤,然后我将国家/地区代码从搜索框发送到控制器$request->input($country);

这是我的模型关系:

POST模型:

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 个答案:

答案 0 :(得分:3)

我会使用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...
            );
        }

    }