Ant*_*ony 5 php methods laravel eloquent laravel-5.2
这是Laravel 5.2.我的用户模型中有一个如下定义的方法:
public function name()
{
return "$this->name_first $this->name_last";
}
Run Code Online (Sandbox Code Playgroud)
我试图找出如何使用它作为查询的一部分,但似乎不可能有一个明显的原因:数据库不知道任何关于方法的东西,这是完全合理的.然而,我想要实现的概念在某些情境中是有意义的,所以我试图看看是否有办法在Eloquent中自然地完成它.
这不起作用,但它代表了我正在努力实现的目标:
public function index(Request $request)
{
$query = new User();
if(Request::has('name')) {
$query = $query->where('name', 'LIKE', '%' . Request::input('name') . '%');
}
return $query->get();
}
Run Code Online (Sandbox Code Playgroud)
简而言之,数据库只知道name_first
和name_last
,但我希望能够在name
不存储的情况下搜索(和排序).也许存储连接的名称没什么大不了的,我应该这样做,但我也在努力学习.
小智 4
我同意博格丹的观点,名字或姓氏中存在空格的问题使得对各个列的查询变得困难,所以这可能是要走的路。可以通过将其定义为自定义范围来增加代码重用: https://laravel.com/docs/5.2/eloquent#local-scopes
// class User
public function scopeOfFullNameLike($query, $fullName)
{
return $query->whereRaw('CONCAT(name_first, " ", name_last) LIKE "%?%"', [$fullName]);
}
// ...
User::ofFullNameLike('john doe')->get();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4108 次 |
最近记录: |