使用laravel控制器/模型逻辑失败

时间:2016-04-25 10:18:53

标签: laravel

我的应用包含2个控制器和型号:

  1. 用户
  2. 飞行
  3. 这就是他们想要一起工作的方式:

    1. 用户登录。[工作]
    2. 用户点击按钮[工作]
    3. 使用用户令牌调用API METHOD:startFlight() [工作]
    4. startFlight():新的航班已添加到flight表格中。 我的API必须返回创建的航班详细信息。
      • 如果航班已存在,请返回用户当前航班
    5. 对航班采取行动:更改航班颜色,音乐等。
    6. 他们之间的关系是用户HasMany飞行(虽然实际上用户只能在一次飞行中)

      • 当用户完成航班时,航班将从航班表中删除。

      因为我注意到当我试图从2个不同的浏览器同时玩2个航班时,每次动作后两个浏览器的数据都会发生变化!然后我注意到我的控制器逻辑是一场灾难。

      假设我在控制器中对startFlight()方法进行API调用:

      我的问题是:

      1. 由于用户只有一个航班分配给他的user_id,我在调用$user->flight();时应该如何检测用户当前的航班? 目前,它通过以下方式返回所有用户航班:

        public function Flight()
        {
            return $this->hasMany('App\Flight');
        }
        
      2. 所以,希望在解决问题#1之后,在致电startFlight()时,我如何创建新航班并在没有航班时返回,或者如果存在,则返回现有航班?

1 个答案:

答案 0 :(得分:0)

1

  1. 你的方法应该用pascal case命名 - 第一个字母应该很小。
  2. 如果您与许多航班有关系,最好将此关系命名为flights()
  3. 之后你可以打电话来回复一个雄辩的收藏:$user->flights(或$user->flights()->get()

    提及:$user->flights - 这将在用户的模型中创建关系。

  4. 如果您想要获取当前航班而不是必须通过某个时间戳(例如created_at)找到它,例如:$user->flights()->orderBy('created_at', 'desc')->first()

    这是您获取最新用户的航班记录或空值的方式。

  5. 2

    当您获得上面显示的最新记录时 - 检查其是否为空,您可以使用:$user->flights()->create($input)轻松创建它,其中input是输入数据数组。