从 eloquent builder laravel 7 获取关系数据
Posted
技术标签:
【中文标题】从 eloquent builder laravel 7 获取关系数据【英文标题】:Get relationship data from eloquent builder laravel 7 【发布时间】:2020-10-08 08:59:36 【问题描述】:我想过滤我的表格数据。我有一个州表,一个城市表,一个学生表。
-
状态(ID,名称)
城市(id、name、state_id)
学生(id、first_name、last_name、city_id)
当我想使用 eloquent builder 过滤数据时,如何访问句柄状态过滤器的关系。
<?php
namespace App\StudentSearch\Filters;
use Illuminate\Database\Eloquent\Builder;
class StateId implements Filter
/**
* @inheritDoc
*/
public static function apply(Builder $builder, $value)
// something like this
return $builder->where('state_id', $value);
StudentSearch.php
<?php
namespace App\StudentSearch;
use App\Student;
use Illuminate\Http\Request;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Str;
class StudentSearch
public static function apply(Request $filters)
$query = static::applyDecoratorsFromRequest($filters, (new Student)->newQuery());
return static::getResults($query);
private static function applyDecoratorsFromRequest(Request $request, Builder $query)
foreach ($request->all() as $filterName => $value)
$decorator = static::createFilterDecorator($filterName);
if (static::isValidDecorator($decorator))
$query = $decorator::apply($query, $value);
return $query;
private static function createFilterDecorator($name)
return __NAMESPACE__ . '\\Filters\\' . Str::studly($name);
private static function isValidDecorator($decorator)
return class_exists($decorator);
private static function getResults(Builder $query)
return $query->get();
请注意,表之间的关系完全在模型中定义。
【问题讨论】:
【参考方案1】:我找到了解决办法。
我们可以用 eloquent builder 做到这一点:
$builder->whereHas('relationName', function($query) use($value)
$query->where('state_id', $value);
);
Link to source
【讨论】:
以上是关于从 eloquent builder laravel 7 获取关系数据的主要内容,如果未能解决你的问题,请参考以下文章
调用未定义的方法 Illuminate\Database\Eloquent\Builder::getAbsolutePath() [重复]
调用未定义的方法 Illuminate\Database\Eloquent\Builder::mapInto()
laravel Builder scope count() 出错 Eloquent/Builder.php 1185行