【问题标题】:Unite/join Database and Eloquent's model query in Laravel 5.2在 Laravel 5.2 中联合/加入数据库和 Eloquent 的模型查询
【发布时间】:2016-11-06 13:50:27
【问题描述】:

我必须检查用户是否在线(在游戏中),如果他不在线,则进行另一次检查以执行 sql 更新。

其实我有这两个查询。

$isOnline = DB::connection('mssql')->table('USER_STAT')->where('user_id', $userID)->value('ConnectionStat');
$character = Character::where('acc_id', $userID)->where('Name', $characterName)->firstOrFail();

有没有办法可以使用unionjoin 来保存数据库查询?我认为这不是一个好的做法,并且有一些更好的方法,我在文档中找不到。

我尝试了类似的方法,但没有成功:

$character = Character::where('acc_id', $userID)->where('Name', $characterName)->firstOrFail();
$result = DB::connection('mssql')->table('USER_STAT')->where('user_id', $userID)->union($character)->get();

提前致谢!

【问题讨论】:

  • 您要更新ConnectionStat吗?
  • @chasenyc 不,我只需要知道他是否在线... ConnectionStat 应该返回 0(离线)或 1(在线)。

标签: php sql sql-server laravel orm


【解决方案1】:

使用 Character Model 与 USER_STAT 表的 Model 的关系,您可以轻松查找所需的内容,以确定是否需要在某处进行更新。

Eloquent Relationships

这不会像使用连接那样将查询合并为一个,但无论如何它们并不繁重,从长远来看,充分利用 ORM 将具有更显着的优势。

如果您认为必须使用 SQL 连接,则必须坚持使用查询构建器,但 ORM 通常是更好的选择

Query Builder Joins

【讨论】:

  • 谢谢!我是新手,所以我也遇到了模型问题...您是在告诉我应该创建一个ConnectStatModel.php 并将其附加到用户模型吗?考虑到数据库结构,我应该为他们使用什么样的关系?
  • 我会创建一个 UserStat 模型,并在角色模型中与 public function stat() { return $this->hasMany('UserStat', 'user_id', 'acc_id'); } 建立关系,如果在角色模型中将 acc_id 设置为 $primaryKey ,您可以将其排除在外,然后使用关系加载并轻松访问所有相关统计信息$character = Character::with('stat')->where('acc_id', $userID)->where('Name', $characterName)->firstOrFail(); $isOnline = $character->stat->ConnectionStat;
猜你喜欢
  • 1970-01-01
  • 2016-05-25
  • 1970-01-01
  • 2016-12-18
  • 2019-10-17
  • 1970-01-01
  • 2019-03-29
  • 1970-01-01
  • 2016-04-19
相关资源
最近更新 更多