Неопределенное свойство: Illuminate \ Database \ Eloquent \ Collection :: Laravel 5.2

Я пытаюсь заставить 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(); } ); по 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(); } ); по 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 

Как и ваша ошибка:

Неопределенное свойство: Illuminate \ Database \ Eloquent \ Collection :: $ productName

Вы пытаетесь получить доступ к свойству в коллекции вместо модели. Во-первых, вы можете использовать созданные вами отношения, например:

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

Это обеспечит включение элементов заказа в результат, а не выполнение другого запроса для их получения.

Затем вы можете перейти к $order к представлению:

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

(Вероятно, вы можете просто оставить номер заказа, который был фактическим заказом, также)

Затем вы можете получить доступ к order в своем представлении и выполнить цикл через такие items :

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

FK

Еще один совет может состоять в том, чтобы обновить таблицу, чтобы использовать индексы для повышения производительности и сделать ее аккуратной, например, FK вы упомянули в комментарии о своей миграции. Вы можете выполнить миграцию, чтобы обновить его, например:

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

И / или расширьте это, в соответствии с вашими потребностями (каскадом и т. Д.).