如何使用 Laravel 获取具有表之间关系的数据

Posted

技术标签:

【中文标题】如何使用 Laravel 获取具有表之间关系的数据【英文标题】:How get data having relationships between tables using Laravel 【发布时间】:2020-06-13 09:51:01 【问题描述】:

我有一个带有 Laravel 的 API,我决定使用表之间的关系,我已经在所有迁移中使用这些函数将它们关联起来:

// Migration file: 2020_05_26_185555_create_customers_table.php on line 27
$table->foreign('user_id')->references('id')->on('users');

然后我实现了如下功能: (获取与之相关的记录):

// Model app\User.php on line 80
public function customers()

    return $this->hasMany(Customer::class);

客户控制器上,如何使用上面显示的功能列出该用户**的所有客户,即替换以下代码:

// Controller Customer\CustomerController.php on line 17
public function index()

    $user_id = Auth::id();
    $customers = Customer::where('user_id', $user_id)->get();
    return $this->showAll($customers, 200, $filters);

对于类似以下的东西(只是一个例子,它不起作用,但这是我的意思的想法):

// Controller Customer\CustomerController.php on line 17
public function index()

    $customers = User::customers(); // Ejemplo
    return $this->showAll($customers, 200, $filters);

我的目标是在相关表之间创建关系,例如用户的客户**,而不使用条件,就像我当前的代码实现一样。

有人可以帮我解决这个问题吗?

【问题讨论】:

$customers = Auth::user()->customers; 应该可以完成这项工作。 【参考方案1】:

您可以使用关系的动态属性来访问它(并加载它):

public function index()

    $user = Auth::user();

    $customers = $user->customers;

    ...

Laravel 7.x Docs - Eloquent - Relationships - Relationship Methods vs Dynamic Properties

【讨论】:

以上是关于如何使用 Laravel 获取具有表之间关系的数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 laravel 6 使用两个模型之间的关系从第一个表中获取 field_name?

如何从 laravel 中的中间表(多对多关系)中获取数据

Laravel:如何使用数据透视表获取记录?

Laravel:当表有两个外键时,为具有关系的数据库表播种

如何获取具有多个表关系的帖子?

Laravel 数据库模型自身之间的关系