我的Message
模型有很多MessageAttachment
以下代码:
$message = Message::find(1);
return $message->attachments;
输出:
[
{
"id": 1,
"message_id": 1,
"attachable_id": 1,
"attachable_type": "Item",
},
{
"id": 2,
"message_id": 1,
"attachable_id": 1,
"attachable_type": "Photo",
}
]
现在,虽然这一切都很棒,但我想要一种获取模型的方法,MessageAttachment
指的是(即照片或项目)。类似的东西:
return $message->attachments[0]->attachable; // outputs the Item 1 model
这是我被卡住的地方。你会如何以干净简单的方式使用上述结构或类似的东西?
答案 0 :(得分:0)
这应该有效:
$messages = Message::find(1);
foreach($messages as $key => $value){
$model = $value->attachable;
$array[$key] = $model::find($value->attachable_id);
}
dd($array);
答案 1 :(得分:0)
简单。解决方案:
class Message extends \Eloquent {
public function attachments() {
return $this->hasMany('MessageAttachment');
}
}
class MessageAttachment extends \Eloquent {
public function attachable() {
return $this->morphTo();
}
}
这样做的:
$message = Message::find(1);
$message->attachments[0]->attachable; // returns the model
答案 2 :(得分:0)
最佳做法是直接使用现实获取项目。你可以这样做:
Messages::with('attachments', 'attachments.photo')->get();
这里的照片是附件的关系。将获取所有关系。如果您只有一条消息,则可以通过以下方式访问该关系:
$message->attachments->first()->photo