php - Laravel Eloquent 选择 1 :n to 1:1

标签 php mysql laravel eloquent

我在Laravel eloquent 的理解上有问题。 我在 mysql 中有 4 个表:

enter image description here

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;
}

你知道另一种方法吗?

谢谢。

the post is resolved: the best way is to use the relationship : Has Many Through

最佳答案

就像thisiskelvin在评论中建议的那样,你可以看看hasManyThrough .

否则,您可以使用 Laravel 的 Collection methods如下:

$user = Utilisateurs::find($id);
$bs = $user->as()->map(function($a){
  return $a->b()->first();
})->filter(function($b){
  return $b;
})->toArray();

关于php - Laravel Eloquent 选择 1 :n to 1:1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52719723/

相关文章:

javascript - 如何将javascript函数中的值POSTinput到另一个php页面以将它们保存到数据库中

php - Zend_Log_Writer_Firebug() 不工作

mysql - 使用 LEFT JOIN 后获取重复行

php - Laravel - 我应该存储模型结果以避免多个数据库查询吗?

php - 未找到 Laravel 基表或 View

php - 如何在 Laravel 5.2 中检查 url?

MYSQL:SELECT * FROM 表 WHERE 创建时间 < NOW() 或 NOW().replace(second=0)?

php - 向 Google Cloud PHPMyAdmin 服务器发送 REST 调用不起作用?

Laravel 新星 : authenticate with Passport

javascript - 使用 HTML5 拖放在 MYSQL 中保存 div 的值