在eloquent中用外键写连接的替代方法?

I'm using laravel-eloquent and want to return a collection that joins several tables. For now, I do this using the query builder join method, but I would like to stay within eloquent. I mean, I already defined all my relationships, why should I write joins with foreign keys all the time?

For example, if I have defined my models like this:

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

and want to return all the comments with the user names, for now I would write this:

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

I have tried writing

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

but it didn't work. Do I need to define a new collection? I will end up with many, many collections if I do that...

Try:

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

I have not tested the codes yet. Please check and let me know if it works for you?