我正在使用Laravel。我试图将用户模型和消息模型与许多关系联系起来。 当我访问用户消息时,它表示功能未定义。但是定义了该函数。 这是我得到的错误
Call to undefined method Illuminate\Database\Eloquent\Collection::messages()
用户模型。
public function docs(){
return $this->belongsToMany('Doc');
}
public function messages(){
return $this->belongsToMany('Message');
}
消息模型。
public function users(){
return $this->belongsToMany('User');
}
我正在尝试为所选用户存储消息。这是错误上升的地方。 我还设置了数据透视表。
消息控制器。
public function store()
{
//
$input = Input::only('title', 'body', 'sel_users');
$msg = Input::only('title', 'body');
$sel_users = Input::only('sel_users');
$this->messageForm->validate($input);
$insert = Message::create($msg);
$id = $insert['id'];
foreach ($sel_users as $userid) {
$user = User::find($userid);
$user->messages()->attach($id);
}
return Redirect::route('messages.index');
}
答案 0 :(得分:1)
你的问题是循环中的userid
是一个数组而不是单个id:
foreach ($sel_users as $userid) {
$user = User::find($userid); // find() provided with array returns collection...
$user->messages()->attach($id); // .. so here you can't call messages() on that collection
}
// it works the same as:
// User::whereIn('id', $userid)->get();
这是因为Input::only(...)
返回数组,你必须在sel_users
中有一个id数组,所以:
$sel_users = Input::only('sel_users');
// $sel_users = array('sel_users' => array( id1, id2 ...) )
你想要的是这个:
$sel_users = Input::get('sel_users');
// $sel_users = array( id1, id2 ...)
然后其余代码将按预期工作。