【发布时间】:2022-01-05 07:00:15
【问题描述】:
背景资料
在我的项目中,我使用的是 Illuminate\Database 包。
我设置了两个类:User 和 Customtag。我正在尝试在两者之间建立关系。
我有两个表:vip_users 和 vip_customtags。两者都有一个名为“steamid”的列,即 VARCHAR(255)。
现在,有多个用户,但对于这种情况:我有一个用户的 steamid 为 76561198048535340。
还有一个带有steamid 7656119804853534的customtag1
问题
foreach (User::all() as $u)
{
echo "User: " . $u->vip_id . "<br>";
print_r($u->customtag);
}
此代码打印用户 1、2、3、4、5... 等。但是当蒸汽 ID 为 76561198048535340 的用户出现时,它返回蒸汽 ID 为 7656119804853534 的自定义标签1
User: 1
User: 2
VipSystem\Models\Customtag Object
(
...
[attributes:protected] => Array
(
[steamid] => 76561198048535341
)
[original:protected] => Array
(
[steamid] => 76561198048535341
)
...
)
User: 3
User: 4
User: 5
反过来,请求所有自定义标签可以正常工作。例如:
foreach (Customtag::all() as $tag)
{
echo "Tag: " . $tag->id . "<br>";
print_r($tag->user);
}
打印:
Tag: 1
Tag: 2
Tag: 3
Tag: 4
Tag: 5
类
用户
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasOne;
class User extends Model
{
public $timestamps = false;
public $primaryKey = "steamid";
public function customtag(): HasOne
{
return $this->hasOne(Customtag::class, "steamid", "steamid");
}
}
自定义标签
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class Customtag extends Model
{
public $timestamps = false;
public $primaryKey = "id";
public function user(): BelongsTo
{
return $this->belongsTo(User::class, "steamid", "steamid");
}
}
【问题讨论】: