سلام
من اومدم جداول terms وردپرس رو برای لاراول ایجاد کردم
جداول شامل :
posts
terms
termtaxonomy
termrelationship
تو مدل ها ارتباط چند به چند رو مشخص کردم و تو ذخیره اطلاعات مشکلی نیست
حالا می خوام یه کوئری بزنم همه پست ها رو بیاره خروجی می خوام یه آرایه تو در تو به این شکل بشه :
[0] => Array
(
[Post] => Array
(
[id] => 1
[title] => First article
[content] => aaa
[created] => 2008-05-18 00:00:00
)
[Tag] => Array
(
[0] => Array
(
[id] => 1
[name] => tag1
)
[1] => Array
(
[id] => 2
[name] => tag2
)
)
[Category] => Array
(
[0] => Array
(
[id] => 1
[name] => cat1
)
[1] => Array
(
[id] => 2
[name] => cat2
)
)
[1] => Array
(
[Post] => Array
(...
تو mysql که کوئری رو تست می کنم خب بابت هر تعداد tag و category رکورد پست و تکرار می کنه تو این لینک https://stackoverflow.com/questions/11551061/how-to-get-nested-array-from-mysql-select-with-joins گفته بیا اول پست ها رو fetch کن بعد بیا با حلقه postid رو بفرست و کوئری های دیگه رو بزن و نتایج رو بریز تو یه آرایه دومی
حالا می خوام ببینم لاراول راه حل ساده تری نداره ؟ اگر با query builder یا راه حل بهتر دیگه ای هست ممنون می شم راهنمایی کنید
سلام اگر به درستی روابط چند به چند رو پیاده سازی کرده باشید به این صورت میتونید:
$res = array();
$posts = Post::all();
foreach ($posts as $post) {
$postItem = array(
['id'] => $post->id,
['title'] => $post->title,
['content'] => $post->content,
['created'] => $post->created_at
);
$tagArray = array();
foreach ($post->tag as $tag) {
array_push($tagArray, [
['id'] => $tag->id,
['name'] => $tag->name
]);
}
$catArray = array();
foreach ($post->categories as $cat) {
array_push($catArray, [
['id'] => $cat->id,
['name'] => $cat->name
]);
}
$item = array(
['Post'] => $postItem,
['Tag']=>$tagArray,
['Category']=>$catArray
);
array_push($res,$item);
}
dd($res);
@m.fartaj
سلام.
باید از ویژگی های Eloquent استفاده کنید. برای اینکه اون مقادیر رو هم هر بار نشون بدید بهتره که از Eager Loadingاستفاده کنید.
https://laravel.com/docs/7.x/eloquent-relationships#eager-loading
@amin.mokhtari94
ممنون برای post به termrelationship جواب داد ولی چون خود post با tag و category ارتباط نداره و termrelationship با جدول مربوط ارتباط داره و جداولشون از هم جدا نیستن فقط با یک فیلد type از هم جدا می شن که از نوع tag هست یا category برای پیدا کردن دومی یک تابع برای جستجو زدم و اکی شد فقظ یک سوال برای تعداد بالای پست این کار درسته و eloquent پیشنهاد می شه ؟!
تصویر دیتا مدل وردپرس رو هم گذاشتم تا بهتر متوجه جداول بشید

شاید پاسخ شما همینجا باشد
@amin.mokhtari94
ممنون همین custom field رو می خوام پیاده کنم حالا به صورت فرم ساز فقط پلاگین ندارم