Laravel 模型关联数据怎么获取第一条

当使用laravel模型关联获取关联表的数据时想获取第一条时
例如:

       ......
       return CarClue::with(['carcluediscuss'=>function($query){
            return $query->first();
        }])->where('user_id',$user->uid)->where('shop_id',$user->shop_id)->get();
      ......

试过take这些
上面的愉快我想获取关联表的第一条数据.但是出来的结果是关联表的数据没了...我也不知道怎么回事.跑来问问社区的大神们.

by JeffreyBool blog :point_right: link
JeffreyBool
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 11
first前加latest()或oldest()
6年前 评论
JaguarJack

@张高

6年前 评论
JeffreyBool

@吴彦文 咋了

6年前 评论
JeffreyBool

@梦康 不行.我试过了

6年前 评论

latest,take确实结果不对,别的估计你也试了.
这个业务比较常见,用原生sql搓出来就有点复杂,所以我觉得用with直接弄,也是不好弄.
只能换思路,从表到具体记录.
我用我的表弄的,道理一样的,都是一对多,取主表关联从表唯一的一条数据
控制器:

User::all();

模型

protected $appends = ['status_text', 'last_customer'];
public function getLastCustomerAttribute()
{
    return Customer::where('user_id', $this->attributes['id'])->latest()->first();
}

输出

{
    "users": [
        {
            "id": 1,
            "name": "wmk",
            "last_customer": {
                "id": 3,
                "company_id": 1,
                "nickname": "aadl2ad",
                "user_id": 1
            }
        },
        {
            "id": 2,
            "name": "kkk",
            "last_customer": {
                "id": 2,
                "company_id": 1,
                "nickname": "aadlad",
                "user_id": 2
            }
        }
}

或者跟本网站社区板块源码一样,多加个last_reply_id字段.
或者分别取两表数据,手动慢慢组合结果,
还可以在transformer里include关联

6年前 评论
$users = user::all()->toArray();
$customers = Customer::orderBy('id', 'desc')->get()->toArray();
       foreach ($users as &$user){
            foreach ($customers as $customer){
                if ($customer['user_id'] == $user['id']) {
                    $user['kehumen'] = $customer;
                }
            }
        }
        return $users;
6年前 评论

with的本质就是使用whereIn() 语句预加载获取所有的关联数据,你如果只取一条数据,就没有必要使用他了

5年前 评论
JeffreyBool

@小龙 以前提的.现在忘了.

5年前 评论

关联model排个序拿第一个。

4年前 评论
public function lastFollowLog()
{
    return $this->hasOne(MemberFollowLog::class, 'member_id', 'id')->orderByDesc('created_at');
}

with('lastFollowLog') 就好了

4年前 评论

$user->details->first(); 第一条
$user->details->last(); 最后一条

file
$user->details->where('status',1)->last();
还可以加额外的条件
其他的看手册 查询构造器《Laravel 5.8 中文文档》)

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!