Laravel получить рассчитывать на отношения ToMany - PullRequest
0 голосов
/ 15 мая 2018

в моем проекте у меня есть две модели:

Содержание:

class Contents extends Model
{
    protected $table = 'contents';
    protected $guarded = ['id'];

    public function categories()
    {
        return $this->belongsToMany(ContentCategories::class);
    }
}

и Категории:

class ContentCategories extends Model
{
    protected $table = 'contents_categories';
    protected $guarded = ['id'];

    public function contents()
    {
        return $this->belongsToMany(Contents::class);
    }
}

в моем проекте каждый контент должен иметь одну или несколько категорий, и я хочу получить количество контента, которому они присвоены категории с помощью этого кода:

$categories = ContentCategories::with('contents');
dd($categories->contents->count());

к сожалению, я получаю эту ошибку:

"Undefined property: Illuminate\Database\Eloquent\Builder::$contents"

как я могу решить эту проблему? спасибо

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Вы должны использовать count для одной категории следующим образом:

$category = ContentCategories::find($id);
$category->contents()->count();

Остерегайтесь () после содержимого, чтобы считать на уровне SQL!

Почему?Короче говоря,

$categories->contents

- то же самое с

$categories->contents()->get()
0 голосов
/ 15 мая 2018

Ваша переменная $categories - это коллекция, в которой каждая категория имеет атрибут contents.Таким образом, вы можете сделать ->contents->count() для каждой категории, но не для всей коллекции.

Если вы хотите подсчитать каждую категорию, просто сделайте это внутри цикла foreach, когда вам это нужно.

Если вам нужно общее количество содержимого, связанного с категориями, есть лучший способ:

Contents::has('categories')->count();

В качестве отступления, я бы предложил переименовать ваши модели в единственное, поскольку каждый экземпляр один о чем-то, но это всего лишь предложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...