LARAVER 4:魔法のように魔法のように呼ばれる関係の奇妙な行動

StackOverflow https://stackoverflow.com//questions/20018719

  •  21-12-2019
  •  | 
  •  

質問

次の作業モデル

class Task extends Eloquent {
    public function user()
    {
        return $this->belongsTo('User');
    }
}
.

電話したとき:

$task = Task::with('user')->first();
.

次の期待結果を得ます:

{
    id      : 10,
    user_id : 20,
    user    : {
        id      : 20
    }
}
.

と以下の照会ログ:

select `tasks`.* from `tasks` limit 1;
select * from `users` where `users`.`id` in (20);
.

しかし、私が魔法のように私の関係を設定するとき、BentyStoの関係が壊れる:

class Task extends Eloquent {
    public function __call($name, $arguments)
    {
        if ($name === 'user')
            return $this->belongsTo('User');

        return parent::__call($name, $arguments);
    }
}
.

次の結果が発生します。

{
    id      : 10,
    user_id : 20,
    user    : null // USER IS MISSING!
}
.

と次の違反照会ログ:

select `tasks`.* from `tasks` limit 1;
select * from `users` where `users`.`id` in (0); // NOTE THE 0 INSTEAD OF 20
.

エラーはありません。私はbelongsToManyで同じことを試しましたが、それは完全に機能します。

何らかの理由で '20'は所属の関係に渡されません。したがって、__call()が新しいクエリインスタンスを発射していることを期待していますが、理由は理解できませんか?

私は時間を記録しました。それでは、問題になることができない私の知る限り。

役に立ちましたか?

解決

それはおそらくLaravelがそれがデフォルトの外部キーとして内側のメソッドの名前を使用しているためです。これを試してください:

return $this->belongsTo('User', 'user_id');
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top