2016-03-20 3 views
1

Я продолжаю получать эту ошибку. Попытка получить свойство не-объекта.Попытка получить свойство не-объекта Laravel 5.2

Это мой контроллер

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

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

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

Это то, что на мой взгляд

<div class="panel-heading">Order {{ $orderNumber->id }} Items</div> 
     <div class="panel-body"> 
      @foreach ($items->westcoorderitems as $item) 
       <li>{{ $item }}</li> 
      @endforeach 

     </div> 
    </div> 

Это мои две модели

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

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

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

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

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


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

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

Вот что мои таблицы выглядит

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(); 
}); 
+0

Возможный дубликат [? Reference - Что эта ошибка означает в PHP] (http://stackoverflow.com/questions/12769982/ reference-what-this-error-mean-in-php) – RiggsFolly

ответ

0

В последних выпусках Laravel многое изменилось под капотом. С выпуском> = 5 модели не загружаются автоматически в ваше приложение. В вашем контроллере под пространством имен {yournamespace}; заявление, ссылки на классы, необходимые при использовании заявление следующим образом:

use App\westcoorders 

Просто совет о конвенциях: соблюдение конвенций всегда является хорошей практикой. Ваши модели следует называть WestCoorder и WestCoorderItem (обратите внимание на имена CamelCase для классов). Эта концепция действительна для контроллера тоже (WestCoordersController и WestCoorderItemsController)

+0

У меня уже есть это 'use App \ westcoorder;' в моем контроллере, и я все еще получаю ошибку. – SCRATK

+0

. И еще я начинаю использовать CamelCase. Поэтому я должен иметь он вроде этого «WestcoOrderItems» и «WestcoOrder» – SCRATK

0

Прежде всего, вы должны проверить, если $orderNumber существует, прежде чем использовать его:

@if ($orderNumber) 
    {{ $orderNumber->id }} 
@endif 

Далее, вы пытаетесь итерацию $items->westcoorderitems, но:

  • Это не коллекция, так как вы используете метод first(). Он возвращает один экземпляр, поэтому вы не должны его перебирать.
  • Я не вижу колонки westcoorderitems в вашем столе westcoorderitems, поэтому вы не должны пытаться использовать $items->westcoorderitems здесь.
  • Вы также должны проверить, нет ли $items, прежде чем использовать его.

Таким образом, ваш код должен выглядеть следующим образом:

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

У меня действительно было такое, но я получал это как ошибку 'Undefined property: Illuminate \ Database \ Eloquent \ Builder :: $ productName', и я все еще есть? – SCRATK

+0

Это значит, что ваш запрос не дает результатов. Попробуйте использовать 'dd ($ items)' before '{{$ items-> productName}}', чтобы узнать, имеет ли он 'productName'. –

+0

Так что я бы не возвращал результатов. Это означает, что отношения между двумя базами данных не работают – SCRATK

Смежные вопросы