Laravel的关系

时间:2017-01-11 16:36:35

标签: php laravel relationship

我正在使用laravel 5.2修复平台我尝试过很多东西,但我不能把它付诸实践:/希望有人可以帮助我

这是我的修理表

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

我有这个错误“试图获取非对象的属性”。 这是一个非常普遍的错误,我看到一些话题与人有相同的问题,我尝试使用他们的解决方案但不起作用。我不知道该怎么办..有人可以帮我吗?

谢谢

更新

现在我有了这个:

控制器:

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');

    }


}

它给了我这个错误“Connection.php第729行中的QueryException: SQLSTATE [42S22]:未找到列:1054'where子句'中的未知列'brands.brand'(SQL:从brands中选择* brandsbrand in(1,2) ))“

我尝试了一切......:/

1 个答案:

答案 0 :(得分:1)

你的Laravel表中应该brand_id而不是brand来自动找出你的密钥。 如果你想使用brand,你应该告诉Laravel它是品牌外键:

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