2014-12-04 97 views
0

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 

这是我卡住的地方。你会如何做到这一点,以一种干净而简单的方式,使用上述结构或类似的东西?

+2

我不熟悉Laravel的数据库层,但是我对框架DB层的经验总体上让我相信最有效的方法是绕过数据库层完全使用手工制作的SQL查询。另外,如果不知道表格结构,很难以有意义的方式回答这个问题。请提供您的模式。 – GordonM 2014-12-04 12:49:19

回答

0

这应该工作:

$messages = Message::find(1); 

foreach($messages as $key => $value){ 
    $model = $value->attachable; 
    $array[$key] = $model::find($value->attachable_id); 
} 

dd($array); 
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 
0

最佳做法是直接与关系基本取物品。你可以这样做:

Messages::with('attachments', 'attachments.photo')->get(); 

这里的照片是附件的关系。所有的关系都会被提取。如果你有一条消息,你可以通过以下方式访问关系:

$message->attachments->first()->photo