2014-12-04 99 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