2017-01-11 3 views
1

я работаю на ремонт платформе с использованием Laravel 5.2 Я судимые много вещи, но я не могу заставить его работать:/надеется, что кто-то может помочь мнеОтношений на Laravel

это мой ремонт стол

Schema::create('repairs', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->integer('brand'); 
     $table->foreign('brand')->references('id')->on('brands'); 
     $table->integer('equipment'); 
     $table->foreign('equipment')->references('id')->on('equips'); 
     $table->string('model'); 
     $table->string('description'); 
     $table->integer('status'); 
     $table->foreign('status')->references('id')->on('statuses'); 
     $table->string('code'); 
     $table->string('notes'); 
     $table->timestamps(); 

    }); 

Тогда у меня есть контроллер

public function index() 
{ 
    $repairs = repair::all(); 
    return view('repair.index_repair',compact('repairs')); 
} 

и это моя модель

class Repair extends Model 

{

protected $fillable = ['brand','equipment','model','description','status','code']; 

public function brand() 
{ 
    return $this->belongsTo('App\brands', 'id'); 
} 

, когда я пытаюсь напечатать бренды имя, как этот

@foreach($repairs as $repair) 
       <tr> 
        <th>{{$repair->brand->name}}</th> 
        <th>{{$repair->equipment}}</th> 
        <th>{{$repair->model}}</th> 
        <th>{{$repair->description}}</th> 
        <th>{{$repair->status}}</th> 
        <th>{{$repair->code}}</th> 
        <th> 
        {!! Form::open(array('route'=>['repair.destroy',$repair->id],'method'=>'DELETE')) !!} 
        {{ link_to_route('repair.edit','Edit',[$repair->id],['class'=>'btn btn-primary']) }} 
        | 
        {!! Form::button('Delete',['class'=>'btn btn-danger','type'=>'submit']) !!} 
        {!! Form::close() !!} 
        </th> 

       </tr> 

       @endforeach 

Я получил эту ошибку «Попытка получить свойство не-объекта». Это очень общая ошибка, и я вижу некоторую тему с людьми, имеющими ту же проблему, и я пытаюсь использовать их решение, но не работает. Я не знаю, что делать дальше. Может ли кто-нибудь мне помочь?

Спасибо

UPDATE

Теперь у меня есть это:

Контроллер:

public function index() 
{ 
    $repairs = repair::with('brands')->get(); 
    return view('repair.index_repair',compact('repairs')); 
} 

Ремонт Модель:

class Repair extends Model 

{

protected $fillable = ['brand','equipment','model','description','status','code']; 

public function brands() 
{ 
    return $this->hasOne('App\brands','brand','id'); 
} 

}

Бренды Модель:

class brands extends Model 
{ 

protected $fillable = ['name']; 

    public function repair() { 

     return $this->belongsTo('App\Repair','brand','id'); 

    } 


} 

, и это дает мне эту ошибку «QueryException в connection.php строке 729: SQLSTATE [42S22]: Column не найдено: 1054 Неизвестный столбец «brands.brand» в разделе «where clause» (SQL: select * from brands, где brands. brand в (1, 2))»

Я стараюсь все ...:/

+0

Пожалуйста, пост ** полного ** ошибки здесь – shalvah

+0

«ErrorException в 02cdd3901ececc3975bc9d2afd31a31c4d299ac2.php линии 28: Попытки получить свойство не-объект (Вид: C : \ wamp6 4 \ www \ fdaw \ resources \ views \ repair \ index_repair.blade.php) «это полная ошибка .. все еще работает:/ –

+0

Не могу положить ее на работу:/может ли кто-нибудь помочь? –

ответ

1

Вы должны brand_id не brand в таблице Laravel, чтобы выяснить, ключ автоматически Если вы хотите использовать brand чем. вы должны сказать Laravel, что бренды внешнего ключ:

public function brand() 
{ 
    return $this->belongsTo('App\brands', 'brand', 'id'); 
} 
+0

В вашем контроллере вы должны определить свои отношения «$ repair = repair :: with ('brand') -> all();". Это делает ваш код более удобочитаемым и может дать вам и лучшее исключение. – patriziotomato

+0

@Buglinjo следует заменить оборудование и строку состояния на equipment_id и status_id на таблицу ремонта? –

+0

@ redness81 Ive получил эту ошибку «Вызов неопределенного метода Illuminate \ Database \ Query \ Builder :: all()" –

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