2014-05-13 88 views
0

我正在使用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'); 

} 

回答

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 ...) 

然后您的其他代码将按预期工作。

+0

工作就像一个魅力。谢谢。 –