我在模型中设置了以下范围:
public function scopeInbox($query, $order = 'desc'){
$userId = Auth::user()->id;
return $query
->where('current_inbox','=',$userId)
->join('users', 'messages.created_by', '=', 'users.id')
->join('users as forwarder', 'messages.forwarded_by', '=', 'forwarder.id')
->select('messages.*', 'users.name', 'forwarder.name as forwarder')
->orderBy('updated_at', $order);
}
以下是它的相关控制器:
public function inbox()
{
$messages = Message::inbox();
return response($messages->get());
}
Laravel不断抛出以下异常:
Argument 1 passed to Illuminate\Database\Grammar::columnize() must be of the type array, string given
任何想法,S / O?
答案 0 :(得分:0)
您有两个名为“forwarder”的别名 - 其中一个用户加入和forwarder.name。
在某个逻辑循环中,当您声明“forwarder.name AS forwarder”时,您试图使用为其表提供的相同别名来别名别名表的属性。
它可能不是导致您的错误的原因,但这在语法上令人困惑,尽管技术上有效。这是我的猜测,但我还没有验证过。
波格丹的评论是正确的。需要更多信息。发生错误的文件和行号以及可能的完整堆栈跟踪可能会有所帮助。
答案 1 :(得分:0)
Route::resource('messages', 'MessagesController',
['only' => [
'index',
'store',
'show',
'destroy'
]
]
);
这阻止我的收件箱路线可用:
Route::get('messages/inbox', 'MessagesController@inbox');
这里的解决方案是将资源路线分解为单独的get / post路线。
Route::get('messages/index', 'MessagesController@index');
Route::post('messages/store', 'MessagesController@store');
Route::get('messages/show', 'MessagesController@show');
Route::get('messages/destroy', 'MessagesController@destroy');
我不确定是否可以将自定义控制器方法定义为资源可访问,但我无法在Laravel文档中找到任何内容。所以,这个解决方案有效,但我肯定会接受另一个答案,为此提供更合适的解决方案。
无论如何,感谢您的见解,S / O!