那是我的表:
countries
id - integer
name - string
users
id - integer
country_id - integer
name - string
posts
id - integer
user_id - integer
title - string
在我的情况下,我只想列出像'%keyword%'这样的国家/地区的帖子。我已经定义了国家模型:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Country extends Model
{
/**
* Get all of the posts for the country.
*/
public function posts()
{
return $this->hasManyThrough('App\Post', 'App\User');
}
}?>
现在,用户将输入国家/地区名称或帖子标题关键字来搜索帖子。我的控制器:
public function posts()
{
$param = Input::all();
if (isset($param['country']) && $param['country']) {
$query = Posts::whereHas('country', function($q) use ($param) {
$q->where('name', 'like', '%' . $param['country'] . '%');
});
}
}
如何在帖子模型中定义国家/地区关系?belongsToThrough已经尝试但没有工作。很多人!
答案 0 :(得分:1)
你面临的问题是“hasManyThrough”关系没有反转,即没有“belongsToThrough”这样的东西。
您可能会使用显式连接,例如
$query = Post::where('countries.name', 'like', '%' . $param['country'] .'%')
->join('users', 'users.id', '=', 'posts.user_id')
->join('countries', 'countries.id', '=', 'users.country_id')