我正在使用laravel-eloquent,并希望返回一个连接多个表的集合。现在,我使用查询构建器连接方法来实现这一点,但我希望停留在eloquent中。我的意思是,我已经定义了我所有的关系,为什么我要一直用外键来编写连接呢?
例如,如果我这样定义我的模型:
<?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');但它并没有起作用。我需要定义一个新的集合吗?如果我这样做,我会得到很多很多的收藏品。
发布于 2019-04-22 18:25:11
尝试:
$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);我还没有测试代码。请检查一下,让我知道它是否适用于您?
https://stackoverflow.com/questions/55792736
复制相似问题