我正在尝试从数据库中获取具有一对多关系的“ experiencias”,但是它返回的是空集合,我该如何解决?

时间:2019-08-21 08:10:36

标签: laravel eloquent laravel-5.8

我正在使用Laravel做一个小型Web应用程序,并将信息直接放在数据库中Experiencia所在的数据库中,即:

id  matricula_id    nombre_Emp  puesto  
1   201618131       1           1   

这是我的Usuario模型:

protected $table = 'usuarios';

protected $fillable = [
 'id',
 'matricula_id',
 'nombres',
 'email',
 'password',
 'facultad',
];

 public function experiencia()
 {
   return $this->hasMany(Experiencia::class,'matricula_id');
 }

还有我的Experiencia模型:

protected $table = 'experiencias';
protected $fillable = [
    'id',
    'matricula_id',
    'nombre_Emp',
    'puesto',
    'fecha_Ini',
    'fecha_Fin',
];

public function usuario()
{
     return $this->belongsTo(usuarios::class,'matricula_id');
}

两个模型都具有可填充的matricula_id

和我要恢复的controller函数是:

public function index($matricula)
{
     $usuario = usuarios::where('matricula_id', $matricula)->with('experiencia')->get();
     dd($usuario->all());
}

当我做dd时,我的结果是这样:

array:1 [▼

  0 => usuarios {#282 ▼

    #table: "usuarios"

    #fillable: array:20 [▶]

    #hidden: array:2 [▶]

    #casts: array:1 [▶]

    #connection: "mysql"

    #primaryKey: "id"

    #keyType: "int"

    +incrementing: true

    #with: []

    #withCount: []

    #perPage: 15

    +exists: true

    +wasRecentlyCreated: false

    #attributes: array:24 [▶]

    #original: array:24 [▶]

    #changes: []

    #dates: []

    #dateFormat: null

    #appends: []

    #dispatchesEvents: []

    #observables: []

    #relations: array:1 [▼ 

      "experiencia" => Collection {#279 ▼

        #items: [] <<<<-------- Here is my problem

      }

    ]

    #touches: []

    +timestamps: true

    #visible: []

    #guarded: array:1 [▶]

    #rememberTokenName: "remember_token"

  }

]

我希望数据库中包含experiencia的数组。

2 个答案:

答案 0 :(得分:0)

您可能实际上在调用错误的模型。

public function index($matricula)
{
    $experiencia = Experiencia::with('usuario')->whereHas('usuario', function($usuario) use($matricula) {
        return $usuario->where('matricula_id', $matricula);
    })->get();

    dd($experiencia->all());
}

您的模型关系也错了

public function usuario()
{
     return $this->belongsTo(usuario::class);
}

答案 1 :(得分:0)

在下面尝试此代码;

public function show($param = null)
{
    if (!$param) {
        return abort(404, "there is no id present");
    }
    $param = (int) $param;
    $usuario = usuarios::with('experiencia')->where('matricula_id', $param)->first();

     dd($usuario->experiencia);
}

用于 index 函数不需要参数,如果未发送参数,则可以保护您的代码,请勿运行其余代码。