eloquent запрос построителя передать столбец во вложенный запрос - PullRequest
0 голосов
/ 02 июля 2018

Я бы хотел запросить в БД все события, для которых после даты начала не было создано комментария. Следующая структура для события и комментария

EVENT 
id 
start 
created_at 
updated_at

COMMENT
id
comment
event_id
created_at
updated_at

Создайте запрос ($ query = Event :: query () -> with ('comments');), который дает мне следующую конструкцию.

[{
    "id": 1,
    "start": "2018-06-18 12:00:00",
    "created_at": "2018-06-18 11:50:07",
    "updated_at": "2018-07-02 12:13:15",
    "comments": [
        {
            "id": 1,
            "created_at": "2018-06-18 12:44:35",
            "updated_at": "2018-06-18 12:44:35",
            "comment": "cascsac"
        }
    ]
}]

Я хочу получить все записи, где comment.created_at находится после даты начала события. Я пробовал со следующим:

   $query->orWhere(function ($query) {
      $value = $query->where(function ($query) use ('start') {
        $query->whereHas('comments', function ($query) use ('start') {
          $query->where('created_at','<=','start');
          //->whereColumn('created_at', '<=', 'start');
        });
      });
    });

Но мне не нравятся мои попытки передать начало вложенному запросу, и я не уверен, как передать его для запроса whereColumn.

Как передать значения из столбцов во вложенное куда. Или как еще я могу запросить a со значением отдельного столбца.

Редактировать1

По запросу весь запрос

$ запрос

Event::query()->with('comments');
$query->orWhere(function ($query) {
          $value = $query->where(function ($query) use ('start') {
            $query->whereHas('comments', function ($query) use ('start') {
              $query->where('created_at','>=','start');
              //->whereColumn('created_at', '>=', 'start');
            });
          });
        });
$events = $query->get();

Передача переменной $ start тоже будет работать, но я не могу преобразовать значение столбца start в переменную $ start, чтобы пропустить вложенный запрос

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Отвечено на https://laracasts.com/discuss/channels/eloquent/querybuilder-pass-column-to-nested-query

$events = Event::with('comments')->whereHas('comments',function ($query) {
   $query->whereColumn('comments.created_at','<','events.start');
})->get();

гдеColumn - функция для сравнения столбцов в запросе.

0 голосов
/ 02 июля 2018

Неправильный код 'start'> Это должно быть $ start

 $start = Carbon::now()->subYears(100); // for examplee
 $query->orWhere(function ($query) {
     $value = $query->where(function ($query) use ($start) {
         $query->whereHas('comments', function ($query) use ($start) {
              $query->where('created_at','<=', $start);
              //->whereColumn('created_at', '<=', $start);
         });
     });
 })
...