php – Laravel:选择Eloquent Eager Loading的关系
发布时间:2020-12-14 19:46:15 所属栏目:大数据 来源:网络整理
导读:我有两个数据库表: 帖子 $table-increments('id');$table-integer('country_id')-unsigned();$table-foreign('country_id')-references('id')-on('countries'); 国家 $table-increments('id');$table-string('name',70); 我使用laravel作为后端.现在我想为
我有两个数据库表:
帖子 $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 IlluminateDatabaseEloquentBuilder|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(); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |