Получить атрибут из выбранной модели - PullRequest
0 голосов
/ 30 января 2020

Я использую PHP 7.1.33 и Laravel Framework 5.8.36.

Я получаю модель обратно по имени, как показано ниже: Product::where('name', '=', $name)->get();

Моя Product модель выглядит следующим образом:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    /**
     * The table associated with the model.
     *
     * @var string
     */
    protected $table = 'product';

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = ['name', 'url', 'category'];
}

При попытке получить атрибут, подобный следующему, я получаю сообщение об ошибке:

$product = Product::where('name', '=', $name)->get();
$product->$url; // ERROR
$product->$category; // ERROR

Любые предложения, как получить доступ к атрибутам в моей восстановленной модели?

Я ценю ваши ответы!

Ответы [ 3 ]

2 голосов
/ 31 января 2020

попробуйте это:

$product = Product::whereName($name)->first();
$product->$url;
$product->$category;
2 голосов
/ 30 января 2020

Не используйте get(), если вы ожидаете только один экземпляр Model. ->get() возвращает Collection, и вы не можете получить доступ к одному свойству без зацикливания.

Используйте ->first() или аналогичный метод, например firstOrFail(), find(), findOrFail(), et c.:

$product = Product::where('name', '=', $name)->first();
$product->$url;
$product->$category;

Если вы ожидаете несколько экземпляров, то вы можете используйте ->get() в сочетании с al oop:

$products = Product::where('name', '=', $name)->get();
foreach($products AS $products){
  $product->$url;
  $product->$category;
}
1 голос
/ 30 января 2020

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

$products = Product::where('name', '=', $name)->get();

foreach($products as $product){
  dd($product->$url,$product->$category);
}

, но я думаю, что если у вас есть одна информация для конкретного имени, используйте first()

$product = Product::where('name', '=', $name)->first();
dd($product->$url,$product->$category);
...