رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
pivot table
#1
سلام.
آیا مفهوم 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.'
پاسخ
تشکر شده توسط:
#2
مفهومش همون نیست ولی در داخل داره از Join استفاده میکنه. علت مشکل شما اینه که خروجی find وقتی چند عنصر رو مشخص میکنید، یک آرایه یا بهتر بگم یک Collection هست نه یک مدل مجزا و درنتیجه متدهای Relation و... روش کار نمیکنن و باید با حلقه، مقادیر رو پیمایش و اطلاعات دلخواهتون رو استخراج کنین. باید اینطوری کار کنید:
$notes = [];
foreach (App\Note::find([3,4]) as $note) {
   $notes = array_merge($notes, $note->tags()->get());
}
پاسخ
تشکر شده توسط:




کاربران در حال بازدید این موضوع: 1 مهمان