Laravel:搜索相关数据
Posted
技术标签:
【中文标题】Laravel:搜索相关数据【英文标题】:Laravel: searching related data 【发布时间】:2019-02-07 01:04:55 【问题描述】:我有模特:学生、导师、国家/地区。
主模型是学生,代码:
公共功能 studentTutors() return $this->morphedByMany(Tutor::class, 'studentable') ->with('tutorAddresses');然后是关系。
导师:
公共功能导师地址() 返回 $this->hasMany(TutorAddress::class, 'tutor_id', 'id') ->with('tutorCountry');导师地址:
公共功能导师国家() return $this->hasOne(Country::class, 'country_id', 'country_id') ->where('user_lang', 'en');如何使用它:
$paginator = $student->studentFavouriteTutors() ->getQuery() //用于分页 ->where(函数 ($query) 使用 ($searchPhraze) 如果 (strlen(trim($searchPhraze))) 返回$查询 ->where('username', 'like', '%' . $searchPhraze . '%') ->orWhere('firstname', 'like', '%' . $searchPhraze . '%') ->orWhere('lastname', 'like', '%' . $searchPhraze . '%'); ) ->分页($pages,$columns,$pageName,$page);问题:
我正在导师表 (Tutor) 中搜索用户/名字/姓氏。
有没有办法从国家表(国家:tutorCountry)中搜索国家名称?比方说,表有“name”列和国家名称。
如果是,$paginator 代码应该如何从国家表中获取数据?
同样的问题也适用于关系 tutorAddresses。可以说,表格有“city”列,其中包含城市名称。
这可能吗?
现在,我不使用关系进行搜索,而只是进行连接。
顺便说一句:我尝试了 hasManyThrough 关系,但它似乎没有从那个“通过”表传递数据,所以这对我不起作用。此外,我的“直通”关系对它来说有点太深了(除非我对这种关系不了解)。
编辑:
jedrzej.kurylo 的回答非常完美!
我只想添加,对于所有这些,他们正在寻找一种在关系的关系中搜索的方法,就像我的例子一样:
studentTutors/tutorAddresses/tutorCountry
...在模型Student中,我还想在Country模型中查找国家名称,它在关系链中更深,与Tutor没有直接关系,而是与TutorAddress相关,与Tutor有关。
这只是嵌套查询的问题:
$searchPhraze = '法国'; $res = $student->studentFavouriteTutors() //第一个关系级别 ->whereHas('tutorAddresses', function($query) use ($searchPhraze) //更深层次的关系 $query->whereHas('tutorCountry', function($query) use ($searchPhraze) $query->where('country', 'like', '%' . $searchPhraze . '%'); ); )->get();或者你甚至可以结合搜索父子关系:
$searchPhraze = 'Hodkiewiczville'; $res = $student->studentFavouriteTutors() //第一个关系级别 ->whereHas('tutorAddresses', function($query) use ($searchPhraze) $查询 //一级关系搜索 ->where('city', 'like', '%' . $searchPhraze . '%') //更深层次的关系 ->orWhereHas('tutorCountry', function($query) use ($searchPhraze) $query->where('country_label', 'like', '%' . $searchPhraze . '%')); ); )->get();以上代码按预期找到了相关数据集。
你,我不确定这个基准。
【问题讨论】:
【参考方案1】:您可以使用whereHas()函数搜索相关表中的数据,例如:
$student->studentFavouriteTutors()
->whereHas('tutorAddresses', function($query) use ($searchPhraze)
$query->where('city', 'like', '%' . $searchPhraze . '%');
)->get();
这将为您提供所有学生最喜欢的导师,这些导师的地址 city 列包含给定的短语。
【讨论】:
完美。谢谢。以上是关于Laravel:搜索相关数据的主要内容,如果未能解决你的问题,请参考以下文章