Проблема в Laravel при отображении имени объекта отношения - PullRequest
0 голосов
/ 11 июля 2019

Я очень новичок в Laravel и сейчас я экспериментирую.Поэтому я решил попытаться установить связь между гипотетическим онлайн-продуктом для продажи, у которого в базе данных есть поля 'country_from' и 'country_to'.Короче говоря, я установил отношения, и всякий раз, когда я делаю продукт через формы, данные должным образом отражаются в базе данных.Однако, когда я пытаюсь отобразить данные обратно (название страны), я получаю сообщение об ошибке «Попытка получить свойство« имя »необъекта».

Product Модель

protected $fillable = [

    'country_from',
    'country_to',
    'title',
    'body',
    'price',
    'availability'
];

public function countries(){
    return $this->belongsTo('App\Country');
}

Country Модель

protected $fillable = ['name'];

public static $rules = array('name'=>'required|min:3');

public function products(){
    return $this->hasMany('App\Product');

products таблица: идентификатор, идентификатор_пользователя, идентификатор_каталога страны, идентификатор страны, идентификатор страны, идентификатор фото, название, тело, цена, доступность, созданный_ат, обновленный_ат

countries таблица: идентификатор, имя, create_at, updated_at

В моем блейде $product->country_from отображает правильное значение установленного идентификатора.

Однако, когда я пытаюсь: $product->country->name Я получаю:

ErrorException (E_ERROR) Пытается получить свойство 'name' не-объекта

Кто-нибудь знает, что я делаю не так?Я совершенно новичок в Laravel и PHP и держу пари, что я делаю что-то не так с отношениями, но я понятия не имею, что ..

Ответы [ 2 ]

1 голос
/ 11 июля 2019

Вы пытаетесь получить имя от объекта с именем 'country'.Однако вы определили отношение как countries.

Предложите изменить название отношения в модели Product на единственное число, поскольку оно принадлежит отношению:

public function country(){
   return $this->belongsTo('App\Country');
}

Затем, когда вы звоните:

{{$product->country->name}}

Если к идентификатору присоединена страна, к которой у вас не возникнет исключение из-за необъекта.

Однако существует другая проблема, которая все равно не будет выполнена.в его нынешнем состоянии.Вы определили свой внешний ключ как country_to и country_from.Laravel по умолчанию в отношении country() будет искать поле с именем country_id для соответствия.Вам нужно будет добавить внешний ключ в отношения непосредственно для каждого типа отношений, который вы хотите (a countryTo() и countryFrom()), чтобы он работал.

0 голосов
/ 11 июля 2019

Вам необходимо вызвать функцию отношения, определенную в модели Product.Должно работать следующее:

{{$product->countries->name}}

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


ПРИМЕЧАНИЕ Я бы порекомендовал вам изменить функцию отношения с множественного числа на единственное, например:

countries() на country(), поскольку товар может принадлежать только одной стране.


Надеюсь, это поможет!

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