首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在eloquent中使用外键编写连接的替代方案?

在eloquent中使用外键编写连接的替代方案?
EN

Stack Overflow用户
提问于 2019-04-22 18:13:23
回答 1查看 84关注 0票数 0

我正在使用laravel-eloquent,并希望返回一个连接多个表的集合。现在,我使用查询构建器连接方法来实现这一点,但我希望停留在eloquent中。我的意思是,我已经定义了我所有的关系,为什么我要一直用外键来编写连接呢?

例如,如果我这样定义我的模型:

代码语言:javascript
复制
<?php
namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    public function comments()
    {
        return $this->hasMany('App\Comments');
    }
}

<?php
namespace App;

use Illuminate\Database\Eloquent\Model;

class Comment extends Model
{
    public function user()
    {
        return $this->belongsTo('App\User');
    }
}

并希望返回所有带有用户名的注释,现在我将这样写:

代码语言:javascript
复制
DB::table('users')->select('users.name', 'comments.body')
->join('comments', 'users.id', '=', 'user_id')
->get();

我试过写作

代码语言:javascript
复制
$users = new 'App\User';
$users->with('comments')
->select('name', 'comments.body');

但它并没有起作用。我需要定义一个新的集合吗?如果我这样做,我会得到很多很多的收藏品。

EN

回答 1

Stack Overflow用户

发布于 2019-04-22 18:25:11

尝试:

代码语言:javascript
复制
$result = null; 
$users = new 'App\User';
$records = $users->with('comments')->get(); 

if ($records->isNotEmpty()){
  $result = $records->map(function($val,$key){
    return ["name"=>$val->name, "comments" => $val->comments()->get(['body']);
  })->values()->all(); 
}

dd($result);

我还没有测试代码。请检查一下,让我知道它是否适用于您?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55792736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档