gpt4 book ai didi

php - 多个一对一关系 Laravel

转载 作者:行者123 更新时间:2023-11-29 07:59:39 24 4
gpt4 key购买 nike

好吧,我正在 Laravel 中构建一个相当大的应用程序。用户管理自己的虚拟足球队。我有一个用户表,然后有一个团队表,其中包含团队特定的内容,例如名称、级别和竞技场等。对于竞技场,我决定添加一个竞技场表,然后在团队表中添加一个 arena_id 列,而不是仅仅添加将竞技场名称添加到团队表中。

这是基本关系:

用户有一个团队

团队有一个用户

团队拥有One Arena

竞技场有一支球队

所以如果我想为用户获取竞技场,我会调用该方法

$user = User::with('team')->where('username', '=', $username)->first();

$user->team->arena->arena_name;

一切正常;但是我觉得有一种更干净或更简单的方法可以做到这一点。该应用程序是否存在或罚款?

最佳答案

您的做法没有任何问题。这是满足您需求的完美方法。然而,可能有帮助的是在 User 模型中创建 getArenaFromUsername() 方法。您的用户模型看起来像这样:

<?php

class User extends \Eloquent {

protected $fillable = [];

public function getArenaFromUsername($username)
{
$user = User::with('team')->where('username', '=', $username)->first();
return $user->team->arena->arena_name;
}
}

那么要从 Controller 获取竞技场名称,您只需执行以下操作:

$user = new User;
$arena = $user->getArenaFromUsername($username);

----------------------------------------或----- ------------------------------------------------------

或者使用我们刚刚在模型中创建的相同方法在 Controller 中执行以下操作来使用依赖项注入(inject):

protected $user;

public function __construct(User $user)
{
$this->user = $user;
}

然后要使用它,您可以在 Controller 中的任何方法中使用一行,如下所示:

$this->user->getArenaFromUsername($username);

这些都是抽象查询的不同方法,以使其在 Controller 中调用更可重用且更简洁。不要害怕在模型中调用公共(public)方法。

关于php - 多个一对一关系 Laravel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24187253/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com