تالار گفتمان nCIS.ir

نسخه‌ی کامل: pivot table
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام.
آیا مفهوم pivot table همان join شدن هست ؟

دو جدول notes و tags رابطه چند به چند دارند . در مدل note داریم :
public function tags(){


   // return $this->belongsToMany(Tag::class )->withTimestamps()->withPivot('created_at');
    return $this->belongsToMany(Tag::class )->withPivot('created_at');
}
وقتی اینو مینویسیم :

$note = App\Note->find(4);
$note->tags()->get();

خروجی رو درست میده .
اما چرا باید فقط یک note رو پیدا کنیم و بعد تمام تگ هاشو.
میخوام تمام note هایی که tag دارند رو نمایش بده . یا note های 3 و 4 . ولی جواب نمیده.

$note = App\Note->find([3, 4]);
$note->tags()->get();

و در این حالت این خطا رو میده
BadMethodCallException with message 'Method Illuminate/Database/Eloquent/Collection::tags does not exist.'
مفهومش همون نیست ولی در داخل داره از Join استفاده میکنه. علت مشکل شما اینه که خروجی find وقتی چند عنصر رو مشخص میکنید، یک آرایه یا بهتر بگم یک Collection هست نه یک مدل مجزا و درنتیجه متدهای Relation و... روش کار نمیکنن و باید با حلقه، مقادیر رو پیمایش و اطلاعات دلخواهتون رو استخراج کنین. باید اینطوری کار کنید:
$notes = [];
foreach (App\Note::find([3,4]) as $note) {
   $notes = array_merge($notes, $note->tags()->get());
}