Я разрабатываю проект электронной коммерции, в котором у меня есть следующие таблицы:
1. Таблица продуктов :
$table->foreign('fabric')->references('id')->on('fabrics');
2. Стол из ткани
ID (целое число)
Название (строка)
Мои модели:
class Product extends Model{
public function fabric(){
return $this->hasOne('App\Fabric','id', 'fabric');
}
}
class Fabric extends Model{
public function products(){
return $this->belongsTo('App\Product', 'fabric', 'id');
}
}
Я хочу, чтобы продукт ткань отображался с помощью этого
{{ $product->fabric()->title }}
Однако он возвращается
Object of class Illuminate\Database\Eloquent\Relations\HasOne could not be converted to string





прежде всего, я предполагаю, что вы определили массив $fillable в своей модели fabric с помощью title
вы должны заменить
{{ $product->fabric()->title }}
по
@isset($product->fabric)
{{ $product->fabric->title }}
@endisset
поскольку в вашей базе данных нет ни одной ткани, связанной с этим продуктом, вы должны добавить if test, чтобы проверить, действительно ли у вас есть ткань, связанная с этим продуктом.
Вы должны либо заменить {{ $product->fabric()->title }} на {{ $product->fabric->title }}
или
Вы можете заменить его на $product->fabric()->get()->title;
Что вы делаете с исходной строкой кода, так это пытаетесь распечатать отношение, а не возвращаемый объект.
Он показывает Trying to get property 'title' of non-object.
Хм, попробуйте использовать var_dump($product->fabric), чтобы увидеть, является ли то, что вы возвращаете, массивом. В этом случае это не объект, и к нему следует обращаться с помощью чего-то вроде $product->fabric["title"]
Спасибо за ваше время, но я получил свою ошибку, на самом деле я использую то же имя для функции, а также для свойства, то есть ткань.
Нельзя использовать то же имя как для свойства, так и для функции, что я там делаю, я использую ткань как для функции, так и для свойства.
Поэтому я изменил столбец таблицы с ткань на идентификатор_ткани.
Оно работает!
это показывает
Trying to get property 'title' of non-object.