尝试从数据透视表中查找数据时给出 Null

问题描述

我在用户钱包模型之间存在多对多关系:

inp = Input(shape=(inp_img_dim)) x_a = Conv2D(16,3,padding='same')(inp) x_a = res_block_16(x_a) x_a = res_block_16_1(x_a) x_a = res_block_32(x_a) x_a = res_block_64(x_a) # some magic here out = Dense(1,activation="softmax")(x_a) out = Flatten()(out) # create model model = Model(inputs=inp,outputs=out) # summarize model model.summary()

Wallet.PHP

public function users() { return $this->belongsToMany(User::class,'user_wallet','wallet_id','user_id')->withPivot('balance'); }

User.PHP

数据透视表 public function wallets() { return $this->belongsToMany(Wallet::class,'user_id','wallet_id')->withPivot('balance'); } 是这样的:

enter image description here

然后在控制器上,我需要访问 user_wallet 字段:

balance

但是现在我得到 public function chargeWallet(Request $request,$wallet,$user) { // $wallet is wallet_id (2) & $user is user_id (373) $bal = Wallet::with("users") ->whereHas('users',function ($query) use ($user) { $query->where('id',$user); })->where('id',$wallet)->first(); dd($bal->balance); } 作为 null 的结果!!

那么这里出了什么问题?如何正确获取 dd($bal->balance)

解决方法

由于它是多对多关系,您将用户附加到许多钱包,而钱包附加到许多用户。对于单个钱包和单个用户之间的每个关系:您有一个枢轴值(pivot 关系)。从您的查询中,您将检索 Wallet with Users,每个用户都附加了 pivot 关系值。因此,要检索数据透视表数据(对于每个关系),您必须使用循环(添加了 with 回调以确保只有具有匹配 user_id 的用户才急切加载钱包):

$bal = Wallet::with(["users"=>function ($query) use ($user) {
                $query->where('user_id',$user);
            }])
            ->whereHas('users',function ($query) use ($user) {
                $query->where('user_id',$user);
            })->find($wallet);

为了避免重复相同的回调(where user_id =),您可以将其分配给变量:

$callback = function ($query) use ($user) {
     $query->where('user_id',$user);
};

然后在您的查询中使用它:

 $bal = Wallet::with(['users' => $callback])
                ->whereHas('users',$callback)->find($wallet);

然后使用 foreach 循环:

foreach ($bal->users as $value){
   dd($value->pivot->balance);
}

如果您只想返回查询的第一个钱包的第一个用户的数据透视值,则:

$user = $bal->users->first();
dd($user->pivot->balance);

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...