2016-10-25 5 views
0

プライマリ/外部キー命名規則を使用していません。私はモデル間の関係を確立しましたが、私はこのメッセージを受け取りました。 => Illuminate\Database\Eloquent\Relations\BelongsTo {#617}laravel 5.3デフォルトキーではないリレーションモデル

私の関係は次のとおりです。国籍には多くの種類があります。

キンドレッドモデル

<?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} 

答えて

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'); 
} 
+0

こんにちはSanzeeb、私はあなたの提案を適用したが動作していなかった、id_kindred列が国籍テーブルに存在しなかったというエラーメッセージが表示されました。 (これは問題ありません)ので、私はこれを試してみましたが、完璧に働いていましたKindred Model:public function Nationality(){return $ this-> belongsTo( 'App \ Models \ Nationality'、 'id_natio_fk'、 'id_natio'); }国籍モデルの公開関数Kindreds(){return $ this-> hasMany( 'app \ Models \ Kindred'、 'id_natio_fk'、 'id_natio'); }見てみると、id_kindredの代わりにid_natioを追加しました。 –

+0

@AndréDeLaOCamposまあ、3番目の引数は、親テーブルのローカルキーです。私は 'id_kindred'を考えました。あなたがそれを解決してうれしいです。 –

0

。お試しください

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

国籍またはnullが表示されます。

+0

質問をチェックしていただきありがとうございます。私は@Sanzeebの提案に従っていますが、最後にいくつかの修正を加えてもうまくいきました。 –