Php 拉威尔雄辩地选择1:n到1:1
我有一个问题,在理解拉威尔雄辩。 我在mysql中得到了4个表: A类和B类的id相同。A类和C类的id相同。A类的标识符可以在表B或表C中 翻译成模型ORM:Php 拉威尔雄辩地选择1:n到1:1,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,我有一个问题,在理解拉威尔雄辩。 我在mysql中得到了4个表: A类和B类的id相同。A类和C类的id相同。A类的标识符可以在表B或表C中 翻译成模型ORM: class Utilisateurs extends Model { public function as() { return $this->hasMany(A::class); } } class A extends Model { public function utili
class Utilisateurs extends Model
{
public function as()
{
return $this->hasMany(A::class);
}
}
class A extends Model
{
public function utilisateur()
{
return $this->belongsTo(utilisateur::class);
}
public function b()
{
return $this->hasOne(B::class);
}
public function c()
{
return $this->hasOne(C::class);
}
}
class B extends Model
{
public function A()
{
return $this->belongsTo(A::class);
}
}
class C extends Model
{
public function A()
{
return $this->belongsTo(A::class);
}
}
所以,我的问题是,是否有一种方法可以从用户表访问表B
我知道一种方法
public function getB(int $id)
{
$user = Utilisateur::find($id);
$bs = array();
if($user){
$user->a()-each(function($item){
$b = $item->b()->first();
if($b){$bs[] = $b}
})
}
return $bs;
}
你知道另一种方法吗
谢谢
帖子已解决:最好的方法是使用关系:
请注意,$bs
和$cs
是集合,而不是单个模型
编辑
如果为空as
$bs = optional($utilisateur->as)->map->b;
就像伊斯开尔文在评论中建议的那样,你可以看看 否则,您可以按如下方式使用Laravel:
$user = Utilisateurs::find($id);
$bs = $user->as()->map(function($a){
return $a->b()->first();
})->filter(function($b){
return $b;
})->toArray();
这就行了。你看过人际关系吗?@thisiskelvin-谢谢你我忘了读这封信,这会有帮助的。谢谢你,好心的先生。
$user = Utilisateurs::find($id);
$bs = $user->as()->map(function($a){
return $a->b()->first();
})->filter(function($b){
return $b;
})->toArray();
$utilisateur = Utilisateur::findorFail(id);
// Each and every B which belongs to the utilisateur.
$bs = $utilisateur->as->map->b;
// Each and every C which belongs to the utilisateur.
$cs = $utilisateur->as->map->c