Альтернативы написанию объединений с внешними ключами в eloquent? - PullRequest
0 голосов
/ 22 апреля 2019

Я использую 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');

но это не сработало. Нужно ли определять новую коллекцию? Я получу много, много коллекций, если я сделаю это ...

1 Ответ

0 голосов
/ 22 апреля 2019

Попробуйте:

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

Я еще не проверял коды. Пожалуйста, проверьте и дайте мне знать, если это работает для вас?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...