雄辩地使用外键编写书写的替代方案?

时间:2019-04-22 10:13:23

标签: php laravel eloquent

我使用的是laravel-eloquent,想返回一个连接多个表的集合。现在,我使用查询生成器的join方法进行此操作,但是我想保持口才。我的意思是,我已经定义了所有关系,为什么我应该一直用外键编写联接?

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

<?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');
    }
}

,并想返回所有带有用户名的评论,现在我将这样写:

DB::table('users')->select('users.name', 'comments.body')
->join('comments', 'users.id', '=', 'user_id')
->get();

我尝试写作

$users = new 'App\User';
$users->with('comments')
->select('name', 'comments.body');

但是没有用。我需要定义一个新集合吗?如果这样做的话,我将得到许多收藏……

1 个答案:

答案 0 :(得分:0)

尝试:

$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);

我尚未测试代码。请检查并告诉我它是否适合您?