লারাভেল. সম্পর্কের সাথে মডেলগুলিতে স্কোপ () ব্যবহার করুন


106

আমার দুটি সম্পর্কিত মডেল রয়েছে: Categoryএবং Post

Postমডেল একটি হয়েছে publishedসুযোগ (পদ্ধতি scopePublished())।

যখন আমি সেই সুযোগটি দিয়ে সমস্ত বিভাগ পাওয়ার চেষ্টা করি:

$categories = Category::with('posts')->published()->get();

আমি একটি ত্রুটি পেয়েছি:

অপরিবর্তিত পদ্ধতিতে কল করুন published()

বিভাগ:

class Category extends \Eloquent
{
    public function posts()
    {
        return $this->HasMany('Post');
    }
}

পোস্ট:

class Post extends \Eloquent
{
   public function category()
   {
       return $this->belongsTo('Category');
   }


   public function scopePublished($query)
   {
       return $query->where('published', 1);
   }

}

উত্তর:


188

আপনি এটি ইনলাইন করতে পারেন:

$categories = Category::with(['posts' => function ($q) {
  $q->published();
}])->get();

আপনি একটি সম্পর্ক নির্ধারণ করতে পারেন:

public function postsPublished()
{
   return $this->hasMany('Post')->published();
   // or this way:
   // return $this->posts()->published();
}

এবং তারপর:

//all posts
$category->posts;

// published only
$category->postsPublished;

// eager loading
$categories->with('postsPublished')->get();

6
ঘটনাক্রমে, আপনি নিজের পোস্টগুলি যেখানে প্রকাশ করেছেন কেবল তা পেতে Category::whereHas('posts', function ($q) { $q->published(); })->get();
চাইলে

4
@tptcat হ্যাঁ Category::has('postsPublished')এই ক্ষেত্রেও হতে পারে
জারেক টাকাকজেক

পরিষ্কার প্রশ্ন, পরিষ্কার উত্তর!
মোজতাবা এইচএন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.