2013-10-23 97 views
0

我是laravel 4的新人,我不能完全弄清楚如何制作和保存相关模型。插入关系模型laravel雄辩

表消息:id | user | message | parent

例如:

class Message extends Eloquent { 

    public function user(){ 
     return $this->belongs_to('User', 'id'); 
    } 

    public function child(){ 
     return $this->hasMany('Message', 'parent'); 
    } 

    public function parent(){ 
     return $this->belongs_to('Message', 'id') 
    } 

} 

所以,如果你有你有一个消息,一个对话,这个消息可能会或可能不会有一个孩子或父母,总是有一个用户这就是消息。所以如果我想用这种方式保存对话,我该怎么做?

例如,我有以下的对话:

约翰(1)表示:大家好!
马克(3)回应:嘿!
汉斯(4)回应说:嗨约翰
彼得(2)响应:早安。

现在,我是约翰,我想将其保存为以下这段对话:

id | user | message | parent 
======================================== 
1  | 1  | Hi, All!  | NULL 
2  | 3  | Hey there! | 1 
3  | 4  | Hi john  | 1 
4  | 2  | Goodmorning. | 1 

我可以单独保存他们所有,但我想,必须有一个更好的办法比下面:

$parent = NULL; 

foreach($messages as $message){ 
    $model = new Message; 
     $model->user = $message['user']; 
     $model->message = $message['value']; 
     if(!is_null($parent)){ 
     $model->parent = $parent; 
     } 
    $model->save(); 
    if(is_null($parent)){ 
     $parent = $model->id; 
    } 
} 

回答

0

我看到的最初的问题是你说消息的父母本身总是自己,你需要指定一个额外的无符号整数来关联。这里有一个例子:

public function parent(){ 
    return $this->belongs_to('Message', 'parent_id') 
} 

您需要使用为孩子们以及同样'parent_id'

public function children(){ 
    return $this->hasMany('Message', 'parent_id'); 
} 
+0

去在我的老堆栈溢出的问题,发现我从来没有答复或接受你的答案。我对此表示歉意,并感谢您的回应。接受你的答案。 – rofavadeka