@H_
404_0@
我有两个
数据库表:
帖子
$table->increments('id');
$table->integer('country_id')->unsigned();
$table->foreign('country_id')->references('id')->on('countries');
国家
$table->increments('id');
$table->string('name',70);
我使用laravel作为后端.现在我想为我的前端实现过滤数据.因此,用户可以选择国家/地区名称,而laravel应仅使用具有指定名称的国家/地区的帖子来回答请求.
如何将此条件添加到我现有的分页查询中?我试过这个:
$query = app(Post::class)->with('country')->newQuery();
// ...
if ($request->exists('country')) {
$query->where('country.name',$request->country);
}
// ...
…导致以下错误:
Column not found: 1054 Unknown column 'country.name' in 'where clause' (sql: select count(*) as aggregate from `posts` where `country`.`name` = Albania)
whereHas
方法根据Laravel
代码库接受参数,
/**
* Add a relationship count / exists condition to the query with where clauses.
*
* @param string $relation
* @param \Closure|null $callback
* @param string $operator
* @param int $count
* @return \Illuminate\Database\Eloquent\Builder|static
*/
public function whereHas($relation,Closure $callback = null,$operator = '>=',$count = 1)
{
return $this->has($relation,$operator,$count,'and',$callback);
}
所以改变代码一点,
$query = ""
if ($request->has('country'){
$query = Post::with("country")->whereHas("country",function($q) use($request){
$q->where("name","=",$request->country);
})->get()
}else{
$query = Post::with("country")->get();
}
顺便说一句,上面的代码可以稍微简化如下;
$query = ""
if ($request->has('country'){
$query = Post::with(["country" => function($q) use($request){
$q->where("name",$request->country);
}])->first()
}else{
$query = Post::with("country")->get();
}