laravel 5.3关系模型使用非默认密钥

时间:2016-10-25 02:41:48

标签: php laravel orm model laravel-5.2

我没有使用主/外键命名约定。我已经建立了模型之间的关系但是我得到了这个消息。 => Illuminate\Database\Eloquent\Relations\BelongsTo {#617}

以下是我的关系:国籍有很多亲属。

亲属模式

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Kindred extends Model
{
//kindreds
protected $primaryKey = "id_kindred";

protected $table = "kindreds";

protected $fillable =     ['id_kindred','nombre_kindred','gender_kindred','bd_kindred','works_kindred','company_kindred','notes_kindred','id_natio_fk','id_mar_sta_fk','id_aller_fk','id_treat_fk','id_educa_fk','id_relat_fk','id_type_kindr_fk','id_fam_gro_fk','id_natio_fk','id_mar_sta_fk','id_aller_fk','id_treat_fk','id_educa_fk','id_relat_fk','id_type_kindr_fk','id_fam_gro_fk'];

public function Nationality()
{
    return $this->belongsTo('App\Models\Nationality', 'id_natio_fk' );
}

public function Marital_status()
{
    return $this->belongsTo('App\Models\Matrital_status' , 'id_mar_sta');
}

国籍模式

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Nationality extends Model
{
protected $primaryKey ="id_natio";
protected $table = "nationalities";

protected $fillable = ['nombre_natio'];

public function kindreds()
{
    return $this->hasMany('app\Models\Kindred' , 'id_natio_fk');
}

这是我在修补程序命令行上执行的代码。

>>> $k = App\Models\Kindred::find(111111111);
=> App\Models\Kindred {#636
 id_kindred: "111111111",
 nombre_kindred: "First Last",
 gender_kindred: "3",
 bd_kindred: "0000-00-00",
 works_kindred: 1,
 company_kindred: "Company",
 notes_kindred: "",
 id_natio_fk: 1,
 id_mar_sta_fk: 1,
 id_aller_fk: 1,
 id_treat_fk: 1,
 id_educa_fk: 1,
 id_relat_fk: 1,
 id_type_kindr_fk: 1,
 id_fam_gro_fk: 1,
 created_at: "2016-10-24 04:21:07",
 updated_at: "2016-10-24 04:21:07",
 }
 >>> $k->Nationality()
  => Illuminate\Database\Eloquent\Relations\BelongsTo {#617}

2 个答案:

答案 0 :(得分:1)

您还需要通过将其他参数传递给hasManybelongsTo方法来覆盖本地密钥。默认情况下,它假定为id,在您的情况下为id_kindredid_nation

return $this->hasMany('App\Model', 'foreign_key', 'local_key');

所以, 亲属模式:

public function Nationality()
{
    return $this->belongsTo('App\Models\Nationality', 'id_natio_fk', 'id_kindred' );
}

国籍模型:

public function kindreds()
{
    return $this->hasMany('app\Models\Kindred' , 'id_natio_fk','id_nation');
}

答案 1 :(得分:0)

你正试图展示一种关系。试试这个

$k->Nationality; // without the '()'

它应该显示国籍或无效。