का उपयोग करके उत्सुक लोड किए गए संबंधों के साथ एक पृष्ठ पर एक मॉडल में दो मॉडल मेरे पास दो मॉडल हैं जिन्हें मैं एक समयरेखा में विलय करना चाहता हूं। मैं mysql में एक व्यू बनाकर ऐसा करने में सक्षम हूं जो तालिकाओं को सामान्य और यूनियन करता है। मैंने इस दृश्य के लिए एक मॉडल बनाया, NewsFeed
। अगर मैं Comment
मॉडल से संबंधित नहीं चाहता तो यह अच्छी तरह से काम करता है। मैं मॉडल पर getMorphClass
विधि को ओवरराइड करके इसे बंद कर चुका हूं। यह मुझे चित्रों के लिए संबंधित टिप्पणियां प्राप्त करने की अनुमति देता है, लेकिन पोस्ट नहीं, क्योंकि जब getMorphClass
कहा जाता है तो मॉडल में कोई डेटा नहीं होता है।लार्वेल
मैं इसे हल करने के तरीके के बारे में किसी भी दृष्टिकोण के लिए खुला हूं, न कि जिस तरह से मैं प्रस्तावित कर रहा हूं, लेकिन मैं डेटाबेस से अधिक डेटा खींचना नहीं चाहता हूं।
न्यूज़फ़ीड
<?php
namespace App\Users;
use App\Pictures\Picture;
use App\Social\Comments\CommentableTrait;
use App\Posts\Post;
use App\Users\User;
use Illuminate\Database\Eloquent\Model;
class UserFeed extends Model
{
use CommentableTrait;
public function user()
{
return $this->belongsTo(User::class);
}
public function getMorphClass(){
if ($this->type == 'post'){
return Post::class;
}
return Picture::class;
}
}
MySQL देखें
CREATE VIEW
`user_feeds`
AS SELECT
`posts`.`id` AS `id`,
`posts`.`user_id` AS `user_id`,
'post' AS `type`,
NULL AS `name`,
NULL AS `thumbnail`,
`posts`.`body` AS `body`,
`posts`.`updated_at` AS `updated_at`,
`posts`.`created_at` AS `created_at`
FROM
`posts`
UNION SELECT
`pictures`.`id` AS `id`,
`pictures`.`user_id` AS `user_id`,
'picture' AS `type`,
`pictures`.`name` AS `name`,
`pictures`.`thumbnail` AS `thumbnail`,
`pictures`.`description` AS `body`,
`pictures`.`updated_at` AS `updated_at`,
`pictures`.`created_at` AS `created_at`
FROM
`pictures`;
चित्रों तालिका
id
user_id
title
img
img_width
img_height
img_other
description
created_at
updated_at
पदों
id
user_id
title
body
created_at
updated_at
क्या आप केवल उत्सुक लोडिंग का उपयोग नहीं कर सकते? $ var = चित्र :: के साथ ('पोस्ट', 'टिप्पणियां') ... – futureweb
सबसे नज़दीक उपयोगकर्ता :: (['पोस्ट', 'चित्र']) -> प्राप्त करें(); जो आपको पेजिनेटेड सामग्री नहीं मिलती है। मैंने '$ user-> पोस्ट() -> पेजिनेट (15); 'और' $ उपयोगकर्ता-> चित्र() -> पेजिनेट (15);' फिर संग्रहों को विलय कर रहा है, लेकिन यह एक बार समस्याग्रस्त हो जाता है अतिरिक्त रिकॉर्ड सेट चाहते हैं। – whoacowboy
क्यों नहीं 'उपयोगकर्ता :: के साथ ([' पोस्ट ',' चित्र ']) -> पेजिनेट (15);' या यहां तक कि 'उपयोगकर्ता :: के साथ ([' पोस्ट ',' posts.comments ',' चित्र ' ]) -> पेजिनेट (15); 'और पोस्ट मॉडल पर भी एक टिप्पणी विधि खींचें? – futureweb