php - 用雄辩的外键编写连接的替代方法?
问题描述
我正在使用 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');
但它没有用。我需要定义一个新的集合吗?如果我这样做,我最终会得到很多很多收藏...
解决方案
尝试:
$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);
我还没有测试代码。请检查并告诉我它是否适合您?
推荐阅读
- haskell - 如何获取文本类型?
- wpf - 在 StackPanel 中以垂直方向水平拉伸 Grid
- django - 如何在 django 中进行社交媒体身份验证
- php - 简码联系表 7 提交在管理页面中不起作用
- ruby - 将所有 HTTP 流量重定向到 HTTPS 似乎是不可能的
- java - 超类访问检查失败:com.sun.javafx.sg.prism.web.NGWebView 类
- sql-server - 在 sql server 上执行查询时,对于某些服务器,它显示所有列,但对于某些服务器,它只显示最后一列?
- mysql - 左连接在 MySQL 中为空
- python - 跨源访问问题 - django 2.1.7
- python - 使用 sklearn 包进行 Gibbs 采样