Свойство [статьи] не существует в этом экземпляре коллекции - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть этот код в моей модели под названием Tag:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Tag extends Model
{
    protected $fillable = [
        'tag'
    ];

    public function articles(){
        return $this->belongsToMany(Article::class);
    }
}

, и я использую этот код в своем контроллере

 public function fillter($target){
        $tags = tag::where('id', 3)->count();
        $article = $tags->articles;

        foreach ($article as $article){
            return $article->title;
        }

    }

, когда я запускаю код, я получаю исключение: Свойство [article] не существует в этом экземпляре коллекции.

, но если я могу запустить следующий код:

$tags = tag::where('id', 3)->first();

Ответы [ 2 ]

3 голосов
/ 30 апреля 2020

Вы практически пытаетесь получить статьи из целочисленных значений, поскольку именно это возвращает функция count(). Эта строка кода возвращает целое число:

$tags = tag::where('id', 3)->count(); // For ex: 3

И вы пытаетесь сделать это в следующей строке кода:

$article = 3->articles; //Which doesn't exist

Используя эту строку кода здесь:

$tags = tag::where('id', 3)->first();

Вы возвращаете экземпляр Tag, который фактически обладает свойством articles.

Кроме того, ваш код foreach не будет работать по двум причинам:

Первый : вы не можете использовать одну и ту же переменную в вашем foreach l oop , это должно быть так:

foreach($articles as $article)

Секунда : выполнение прекратится после первого l oop, так как у вас есть оператор возврата:

foreach ($articles as $article){
     return $article->title;
}

Было бы лучше передать переменную $articles в ваше представление и сделать там foreach l oop.

0 голосов
/ 30 апреля 2020

Не следует путать модели и коллекции.

В модели тегов есть статьи, а в коллекции тегов - нет. Кроме того, нет смысла возвращаться в for-l oop, как вы делаете, как это было бы в самом первом элементе. Я полагаю, вы хотите список всех названий, связанных с тегом. Я думаю, что это можно выразить примерно так:

$tags = tag::where('id', 3)->with('articles')->get();
return $tags->pluck('articles')->pluck('title');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...