【问题标题】:Laravel Eloquent model get unique userLaravel Eloquent 模型获得唯一用户
【发布时间】:2017-07-04 22:27:18
【问题描述】:

我有这张表,叫做“share”:

这是“用户”表:

所以我通过“共享”模型和与每个条目关联的用户获取共享项目列表:

class Share extends Model
{
    public function UserDetail()
    {
        return $this->belongsTo('App\User', 'user_id', 'id');
    }
}

我需要用parent_id 3 返回用户:

$user = Share::where('parent_id', '=', 3)->paginate(15);

它返回所有内容,但我只需要返回这样的唯一用户:

感谢您的帮助。

【问题讨论】:

  • 请不要评价负分。这只是我的问题。
  • 请再次解释您要执行的操作。您想获取Share 并获取该共享的用户吗?
  • @EddyTheDove 是的,没错。我需要从共享表中获取用户列表。所以我可以显示我有多少用户。
  • 所以你只是想显示每个项目被分享了多少次?或者您想查看您的数据库中有多少用户?
  • @EddyTheDove 我需要在我的数据库中显示我与多少用户共享项目。所以在共享表上,我有 parent_id,我需要为共享表获取与该 parent_id 关联的所有用户。

标签: php mysql laravel model


【解决方案1】:

根据你的cmets,你想拿走所有类似parent_id的股份(3):

$shares = Share::where('parent_id', 3)->get();

还有他们的用户。每个共享属于一个用户。但是每个用户用户可以共享多次但只想带用户一次。我们可以做

//Using eloquent
$users = Share::where('parent_id', 3)
->join('users', 'users.id', '=', 'shares.user_id')
->select('users.id', 'users.email', 'users.first_name', 'users.last_name')
->groupBy('users.id', 'users.email', 'users.first_name', 'users.last_name')
->get();

//using Query builder
$users = DB::table('shares')
->join('users', 'users.id', '=', 'shares.user_id')
->where('shares.parent_id', 3)
->select('users.id', 'users.email', 'users.first_name', 'users.last_name')
->groupBy('users.id', 'users.email', 'users.first_name', 'users.last_name')
->get();

这应该为您提供共享 parent_id = 3 的用户的独特列表。

【讨论】:

  • 不幸的是它不能正常工作。它只是返回 parent_id 3 详细信息而不是用户详细信息。
【解决方案2】:

您可以使用groupBy 方法获取唯一用户。参考这个链接 https://laravel.com/docs/5.4/queries

$user = Share::where('parent_id', '=', 3)->groupBy('item_id')->paginate(15);

希望回答了你的问题。

【讨论】:

  • 它不工作。我试过了,但它抛出了这个错误:SQLSTATE[42000]: Syntax error or access violation: 1055 'app_db.share.id' isn't in GROUP BY (SQL: select * from share` where parent_id = 3 group by email limit 15 offset 0)`
  • @Martian.titan 改成user_id
  • 我已经添加了代码并尝试了groupBy('email'),但不幸的是仍然出现同样的错误。非常感谢您的跟进和帮助
  • @Martian.titan 再试一次。我觉得这个应该没问题。
  • select * from share where parent_id = 3 group by item_id limit 15 offset 0)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-08
  • 2017-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-05
相关资源
最近更新 更多