Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 拉威尔雄辩地选择1:n到1:1_Php_Mysql_Laravel_Eloquent - Fatal编程技术网

Php 拉威尔雄辩地选择1:n到1:1

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

我有一个问题,在理解拉威尔雄辩。 我在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 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