Laravel雄辩的过滤结果
在我的控制器中,我从消息模型中检索消息列表。我正试图添加一个过滤器,但过滤器正在相互抵消Laravel雄辩的过滤结果,laravel,eloquent,Laravel,Eloquent,在我的控制器中,我从消息模型中检索消息列表。我正试图添加一个过滤器,但过滤器正在相互抵消 // Controller public function __construct(Message $messages) { $this->messages = $messages; } public function index($filter = null) { $messages = $this->messages ->actioned($filte
// Controller
public function __construct(Message $messages)
{
$this->messages = $messages;
}
public function index($filter = null)
{
$messages = $this->messages
->actioned($filter == 'actioned' ? false : true)
->ignored($filter == 'ignored' ? true : false)
->get();
return view('...
}
// Model
public function scopeActioned($query, $actioned = true)
{
$constraint = ($actioned ? 'whereNotNull' : 'whereNull');
return $query->$constraint('ts_actioned');
}
public function scopeIgnored($query, $ignored = true)
{
return $query->where('is_ignored', ($ignored ? 'Yes' : 'No'));
}
如何设置Eloquent,以便仅在$filter设置为“actioned”时调用scopeActioned,而忽略时调用scopeActioned?简单方法:
另一种方法是在作用域函数中工作
public function index($filter = null)
{
$query = $this->messages->query();
//applying filter
if($filter == 'actioned') {
$query->actioned();
}
if($filter == 'ignored') {
$query->ignored();
}
$messages = $query->get();
return view('...
}
// Model
public function scopeActioned($query, $actioned = true)
{
if($actioned) {
$query->whereNotNull('ts_actioned');
}
return $query;
}
public function scopeIgnored($query, $ignored = true)
{
if($ignored) {
$query->where('is_ignored', 'Yes');
}
return $query;
}