سوال در مورد Eloquent و رابطه ها
4 پاسخ
- مهدی مهری30 مرداد ۱۴۰۰
سلام . میدونم سوالم ربطی به لایوایر نداره . ولی گیج شدم میشه راهنمایی بفرمائید
جدول محصولات : id , name , ....
جدول دسته بندی : id , name , ...
جدول واسط : id , product_id , category_id
روابط رو تو مدل ها ست کردم
دستور استخراج اطلاعات محصولات با داشتن categoryid رو می خواستم .
خودم اینو نوشتم که کار نکرد
$cards = product::all()->categories()->where('id',$this->categoryid )->paginate(12)-------------model product ---------------// <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class product extends Model { public function categories() { return $this->belongsToMany(category::class); } } //-------------------model category------------------------------ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class category extends Model { public function products() { return $this->belongsToMany(product::class); } } //---------------controller-------------------------- namespace App\Http\Livewire\Cards; use Livewire\Component; use App\Models\category; use App\Models\product; use Livewire\WithPagination; class Cards extends Component { use WithPagination; protected $paginationTheme = 'tailwind'; public function render() { $cards = product::all()->categories()->where('id', $this->categoryid)->paginate(12) ; return view('livewire.cards.cards', [ 'cards' => $cards ]); } - قاسم بساکی31 مرداد ۱۴۰۰
سلام خدمت شما دوست عزیز
شما میخوای رابطه many to many برقرار کنی که خیلی سادس
شما نیاز به foreign key در دو جدول اصلی نداری و فقط نیاز به یک جدول واسط داری (paivot table) که نحوه نام گذاری اون خیلی مهمه که اگر شما میخوای ارتباط بین دو جدول role , user برقرار کنی باید به ترتیب حروف الفبا نوشته بشن (role_user)
این لینک کمکتون می کنه
https://laravel.com/docs/8.x/eloquent-relationships#many-to-many
حالا اگر همه رو درست انجام داده باشی باید به درستی کار کنه…
یک نکته دیگه شما اینطوری صدا زدی:
$cards = product::all()->categories()->where('id',$this->categoryid )->paginate(12)یعنی شما داری میگی همه محصولات رو به من بده که یک آرایس…
حالا از این آرایه ، دسته بندیشو بهم بده…
که این درخواست درست نیست… شما یاسد از یک آبجکت ، درخواست دسته بندی کنید نه از یک آرایه
مثلا اینطوری بنویسید:
$cards = product::all()first()->categories()->where('id',$this->categoryid )->paginate(12) - قاسم بساکی31 مرداد ۱۴۰۰
$cards = product::all()->first()->categories()->where('id',$this->categoryid )->paginate(12) or $cards = product::all()[0]->categories()->where('id',$this->categoryid )->paginate(12) - مهدی مهری1 شهريور ۱۴۰۰
ممنون استاد گرامی
بعد از جستجوی فراوان از این قطعه کد استفاده کردم
product::whereHas('categories', function ($query) {$query->where('category_id', $this->categoryid);})->get();
