Laravel:按ID查询

时间:2019-02-19 19:55:05

标签: laravel eloquent relationship

我面临一个非常基本的问题,但无法解决。

两个表:car_modelsgear_type。结构如下:

Model table

Gear table

在主页上,我必须显示所有型号以及配备档位说明的哪辆车。所以,我在做:

$modelos = Modelo::all();
foreach ($modelos as $modelo) {
    $cambio = Cambio::where('id', '=', $modelo->cambio_id)->pluck('descricao');
}
// return $cambio;
return view('home', compact('banners', 'modelos', 'cambio'));

但是视图显示:

ErrorException (E_ERROR)
Undefined offset: 1 (View: /Users/marcellopato/Sites/primorossiseminovos/resources/views/home.blade.php)
Previous exceptions
Undefined offset: 1 (0)

...并且它应该在下图所示的字段中显示齿轮的类型。

Should show: 5 gear, i.e.

2 个答案:

答案 0 :(得分:3)

考虑到您在cambio_id表中有外键{​​{1}},则您在模型中的关系应为:

modelos

那么您可以做:

class Modelo extends Model
{
    public function cambio()
    {
        return $this->belongsTo(‘App\Cambio’);
    }
}

class Cambio extends Model
{
    public function cambio()
    {
        return $this->hasOne(‘App\Modelo’);
    }
}

$modelos = Modelo::with(‘cambio’)->get(); 是一个急切的加载,它为每个with()实例获取cambio

那么您可以做:

modelo

以某种方式,我认为您的表结构可能会更新,关系可能会颠倒,但这也取决于业务情况。

答案 1 :(得分:0)

定义两个模型之间的关系:

class Modelo extends Model
{
    public function cambio()
    {
        return $this->belongsTo(‘App\Cambio’);
    }
}

在查询Modelo时加载关系:

$modelos = Modelo::with(‘cambio’)->get();

在您的视图(叶片)中,您可以显示以下齿轮描述:

@foreach($modelos as $modelo)
    {{ $modelo->cambio->descricao }}
@endforeach

您可以在docs上了解有关模型关系的更多信息。