2017-04-04 14 views
0

Userモデルを認識していない:ポリモーフィック関係 - 保存morphTo()カスタム主キー

public function userable() 
{ 
    return $this->morphTo(); 
} 

メンター・グラフィックス・モデルは:

public function user() 
{ 
    return $this->morphOne('App\Models\User', 'userable'); 
} 

学生モデルはメンターモデルと同じに見えます。

生徒とメンターの表には、ユーザー表の主キーを参照するuser_idというカスタムPKが含まれています。

それでは、私がやろうとしていることは以下の通りです:

$user = new User(); 
    $user->first_name = 'Trajce'; 
    $user->last_name = 'Petkoski'; 
    $user->nickname = 'ads'; 
    $user->administrator = '0'; 
    $user->email = 'asd'; 
    $user->password = Hash::make('test'); 
    $user->save(); 

    $mentor = new Mentor(); 
    $mentor->user_id = $user->id; 
    $mentor->save(); 

    $user->userable_id = $mentor->user_id; 
    $mentor->user()->save($user); 

userable_type値がcorret値に設定されている間しかし、Usersテーブルの上に、userable_idは0に設定されています。ここで問題となるのは、save()はそれをあらかじめ定義された0に設定していることです。裏で何が起こっているのでしょうか?

+0

私Laravel 5.4テストインストールで魔法のように動作しますか? –

+0

最新のもの、5.4 – kjanko

答えて

0

ポリモーフィック関係(morphOne)にデータを追加するために、これを試してみてください。この

public function users() { 
    return $this->morphMany('App\Models\User', 'userable'); 
} 
+0

1:1の関係 – kjanko

0

をお試しください:

移行

ユーザーモデル

public function userable() 
{ 
    return $this->morphTo(); 
} 

メンター・モデル

public function user() 
{ 
    return $this->morphOne('App\Models\User', 'userable'); 
} 

協会コード:

$mentor = new Mentor(); 
// this is important: first save mentor 
$mentor->save(); 

$userdata = [ 
    'first_name' => 'Trajce', 
    'last_name' => 'Petkoski', 
    'nickname' => 'ads', 
    'administrator' => 0, 
    'email' => 'asd', 
    'password' => Hash::make('test') 
]; 

$mentor->user()->create($userdata); 

これは、使用しているLaravelのバージョン

+0

$ table-> increment( 'id'); メンター・テーブルのPKがユーザーのPKである必要があります。PKがIDの場合、それはチャームのように機能します。 – kjanko

+0

これは多形関係が働く方法ではありません。やってみました?回答を投稿してください私は解決策を見て興味があります。 – dparoli

+0

私の遅い応答に申し訳ありません。 Laravelのコアコードの不具合が修正されました。 – kjanko

関連する問題