0
  1. 次のような 2 つのテーブルがあります。

ユーザー

id      email
1     abc@ibm.com
2     abc@hp.com
3     abc@google.com

グループメンバー

grp_id    user_id
1          2
2          2
13         1
13         3

2.私のモデル

そこでは、1 人のグループ メンバーがユーザーである必要があるため、GroupMember だけが 1 対 1 の関係になります。

テーブル ユーザーに関するユーザー モデル

class Users extends Eloquent {
    protected $table = "users";
}

テーブル group_members に関する GroupMember モデル

class GroupMember extends BaseModel{

    protected $table = "grp_members";

    public function user(){
        return $this -> hasOne('Users', 'id');
    }
}

3.私のサービスGroupApi.phpでは、このようなクエリがある場合

class GroupApi {

    public function queryGroupMembers(){

        $result = GroupMember::all();

        var_dump(get_class(GroupMember::all())); //CODE ONE

        foreach($result as $ret){
            var_dump(get_class($ret));  //CODE TWO
            var_dump(get_class($ret -> user));  //CODE THREE
        }
    }
}

var_dump(get_class(GroupMember::all()))ご覧のとおり、CODE ONEで呼び出すと、これが得られました

.string(39) "Illuminate\Database\Eloquent\Collection"

はい、それが私が欲しいものです。

今、CODE TWOで、それは印刷します

string(11) "GroupMember"

はい、オブジェクトも正しいですが、コードがCODE THREEになると、次のような出力が表示されて驚きます。

string(8) "GroupApi"

Usersまたはのインスタンスではなく、GroupApi のインスタンスである理由GroupMember

その場合、どうすれば呼び出せ$ret -> userますか?

どんなアイデアでも大歓迎です、どうもありがとう。

4

2 に答える 2

0

あなたの実装で私が理解していないことがいくつかありますが、Laravelが要求する規則を使用していないことが問題の原因となっている可能性があります.Userをモデル名として使用し、users(モデル+ s)をテーブル名として使用しています. .

また、あなたが示唆するように $g1 は GroupMember オブジェクトではないと思いますが、getClass() して確認できますか?

于 2013-10-21T09:59:23.580 に答える