Laravel Join 返回奇数

Posted

技术标签:

【中文标题】Laravel Join 返回奇数【英文标题】:Laravel Join Returning odd values 【发布时间】:2015-02-26 03:58:01 【问题描述】:

刚刚在我的加入查询中遇到了一个错误。

我在 foreach 中回显数据,并显示用户名。在其他页面上,它工作正常,每个用户名都与行中 ID 中的用户名匹配。但是,在下面的示例中,用户名返回始终是登录用户的名称。

希望下面的内容更有意义。谢谢。

查询是:

$query = DB::table('blogs')
  ->join('followers', 'blogs.id', '=', 'followers.blogid')
  ->where('followers.userid', Auth::user()->id)
  ->where('frontpage', '1')
  ->latest('lastupdated');

通过以下方式调用:

Route::get('following', array('before' => 'auth', function()

  $slug = Route::getCurrentRoute()->uri();
  $builds = Blog::findBuilds($slug);
  return View::make('pages/home', compact('builds'), array('pageTitle' => 'Builds You Are Following'));
));

然后在页面/主页上我将显示如下数据:

foreach ($builds as $build)

  $usernameOfOwner = User::usernameFromID($build->userid);

然后...从ID中获取用户名的函数是:

public static function usernameFromID($id) 
  $user = DB::table('users')->where('id', $id)->first();
  return $user->username;

当我运行类似于顶部的查询但不是连接时,我网站上的其他任何地方,例如:

$query = static::where('frontpage', '1')->latest('lastupdated');

它工作正常,所以我唯一的猜测是它归结为 Join,因为那是代码的唯一不同部分。

【问题讨论】:

【参考方案1】:

问题是您有多个名为userid 的列。 followers.useridblogs.userid。现在在这种情况下,不幸的是,当您使用 $build->userid 时,followers.userid 会返回

您可以通过仅select在结果中添加您想要的列来更改它。

$userid = Auth::user()->id;
$query = DB::table('blogs')
  ->join('followers', function($q) use ($userid)
      $q->on('blogs.id', '=', 'followers.blogid');
      $q->where('followers.userid', '=', $userid);
  )
  ->select('blogs.userid', 'other-column')
  ->where('frontpage', '1')
  ->latest('lastupdated');

顺便说一句:* 也可以,所以你可以根据需要使用select('blogs.*')

【讨论】:

我在一秒钟前经历过,因为我有同样的想法,但似乎没有排序。我会尝试进一步缩小问题范围。 啊,我想我知道为什么了。您的数据库中有不同的userid 列吗? 有趣的想法。是的,我愿意。在 blogs 表中,我还有一个 userid 字段... store 存储 userid。看来我得改一下试试 :) 我重写了我的答案。看看吧

以上是关于Laravel Join 返回奇数的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 查询生成器选择数组内的返回列

Laravel 每天按奇数小时对数据进行分组

Laravel 4 Eloquent 返回错误的 ID

Laravel:自我 JOIN 的雄辩查询

在 Laravel 4 查询生成器中使用 Join 删除

Laravel - 使用 Join 语句更新表中的所有列