【问题标题】:Undefined property: Illuminate\Database\Eloquent\Collection:: Laravel 5.2未定义的属性:Illuminate\Database\Eloquent\Collection:: Laravel 5.2
【发布时间】:2016-07-08 16:51:52
【问题描述】:

我正在尝试让 iot 显示订单中的商品,但我不断收到此错误

这些是我的模型

class westcoorder extends Model
{
    protected $table = 'westcoorders';
    protected $with = 'westcoorderitem';

    protected $fillable = ['is_sent', 'is_delivered'];

    /**
    * @return \Illuminate\Database\Eloquent\Relations\HasMany
    */
    public function westcoorderitem()
    {
        return $this->hasMany('App\westcoorderitem');
    }
}

class westcoorderitem extends Model
{
    protected $table = 'westcoorderitems';

    protected $fillable = ['westcoorder_id','quantity', 'productName', 'productCode', 'price'];


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

这是我的控制器

public function onGoingOrder($orderNumber)
{
    $orderNumber = westcoorder::where('id', $orderNumber)->firstOrFail();

    $items = westcoorderitem::where('westcoorder_id', $orderNumber)->get();

    return view('westco.onGoingOrder', compact('orderNumber', 'items'));
}

这就是我的看法

<div class="panel-heading">Order @if ($orderNumber) {{ $orderNumber->id }} @endif Items</div>
        <div class="panel-body">
                @if($items)
                        {{ $items->productName }}
                @endif
        </div>

这是我的桌子的样子

Schema::create('westcoorders', function (Blueprint $table)
{
        $table->increments('id');
        $table->tinyInteger('is_sent')->default(0);
        $table->tinyInteger('is_delivered')->default(0);
        $table->timestamps();
} );

Schema::create('westcoorderitems', function (Blueprint $table)
{
        $table->increments('id');
        $table->Integer('westcoorder_id'); // fk for westcoOrder.id
        $table->string('quantity');
        $table->string('productName');
        $table->string('productCode');
        $table->decimal('price');
        $table->timestamps();
} );

这是我遇到的错误

Undefined property: Illuminate\Database\Eloquent\Collection::$productName

【问题讨论】:

    标签: php mysql laravel-5.2


    【解决方案1】:

    就像你的错误状态:

    未定义属性:Illuminate\Database\Eloquent\Collection::$productName

    您正在尝试访问集合上的属性,而不是模型。 首先,您可以使用您创建的关系,如下所示:

    $order = App\westcoorder::where('id', $orderNumber)->with('westcoorderitem')->firstOrFail();
    

    这将确保订单项将包含在结果中,而不是执行另一个查询来获取它们。

    然后您可以将$order 传递给视图:

    return view('welcome', compact('orderNumber', 'order'));
    

    (您也可以省略作为实际订单的 orderNumber)

    然后你可以在你的视图中访问order,并像这样循环访问items

    @foreach($order->westcoorderitem as $item)
        {{ $item->productName }}
    @endforeach
    

    FK

    另一个提示可能是更新您的表以使用索引来提高性能并使其整洁,例如您在创建迁移的评论中提到的FK。您可以创建migration 来更新它,例如:

    $table->foreign('westcoorder_id')->references('id')->on('westcoorders');
    

    和/或根据您的需要(级联等)对此进行扩展。

    【讨论】:

    • 我也试过了,但我仍然得到同样的错误,就像关系不工作一样
    • @SCRATK 我已经复制了您的设置并提出了这个解决方案,希望对您有所帮助
    • 谢谢,看来这会有所帮助,我下班回家时会试一试。第一次做这样的事情,工作需要它通过电子邮件发送订单。
    猜你喜欢
    • 2016-06-02
    • 2014-11-23
    • 2017-03-05
    • 1970-01-01
    • 2017-02-12
    • 2018-10-22
    • 1970-01-01
    • 2020-05-04
    • 1970-01-01
    相关资源
    最近更新 更多