我试图进行一个查询,过滤一个表上的2列或另一个表上的2列。 这是我到目前为止:
// In my controller return $registry = Registry::search($first_name, $last_name)->get(); // In my model public function user() { return $this->belongsTo('User'); } public function scopeSearch($query, $first_name, $last_name) { $search = $query->where('coregistrant_first_name', 'LIKE', "%$first_name%") ->where('coregistrant_last_name', 'LIKE', "%$last_name%") ->orWhere(function($query) use ($first_name, $last_name) { $query->$this->user()->where('first_name', 'LIKE', "%$first_name%"); }); return $search; }我尝试了很多不同的东西,现在我停留在$query->$this->user()行,出现此错误:
Undefined property: Illuminate\Database\Query\Builder::$[]有谁知道如何解决这个问题?
I am trying to do a query that filters on 2 columns on one table OR 2 columns on another. This is what I have so far:
// In my controller return $registry = Registry::search($first_name, $last_name)->get(); // In my model public function user() { return $this->belongsTo('User'); } public function scopeSearch($query, $first_name, $last_name) { $search = $query->where('coregistrant_first_name', 'LIKE', "%$first_name%") ->where('coregistrant_last_name', 'LIKE', "%$last_name%") ->orWhere(function($query) use ($first_name, $last_name) { $query->$this->user()->where('first_name', 'LIKE', "%$first_name%"); }); return $search; }I have tried a lot of different things and now I'm stuck on the $query->$this->user() line with this error:
Undefined property: Illuminate\Database\Query\Builder::$[]Anyone know how I can fix this problem?
最满意答案
@Keith,在Laravel中,您无法使用关系动态选择数据。
据我所知,Laravel支持以下规则来使用关系检索数据:
$registers = Registry::with('user')->get();
$registers = Registry::where('xyz', '1')->get();
//然后你可以根据需要加载关系
$registers->load('user');
在你的模型中
public function user() { return $this->belongsTo('User')->where('first_name', 'LIKE', "%xyz%"); }
然后从您的控制器:
$registers = Registry::with('user')->get(); 如果你有一对多的关系,说你有licenses关系
//您可以指定运算符和计数:
$registers = Registry::has('licenses', '>=', 3)->get();
参考: http : //laravel.com/docs/eloquent#querying-relations
I ended up using query builder to do it.
更多推荐
发布评论