我有三个表格,分别是用户和国家。 帖子由来自某个国家的用户保存。 现在,我要搜索一个国家/地区所有用户的所有帖子。
因此用户将按国家/地区进行过滤,然后我将国家/地区代码从搜索框发送到控制器$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);
}
这不起作用。有人可以告诉我我在做什么错吗?
答案 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...
);
}
}