Laravel - Получить данные из таблицы, где предложение в другой таблице - PullRequest
1 голос
/ 22 мая 2019

У меня есть следующие 2 таблицы:

Таблица: Продукция

+----+---------+-------------+
| id |  fn_id  | created_at  |
+----+---------+-------------+
|  1 |    4    |  SOME TIME  |
|  2 |    5    |  SOME TIME  |
|  3 |    6    |  SOME TIME  |
|  4 |    10   |  SOME TIME  |
|  5 |    10   |  SOME TIME  |
+----+---------+-------------+

Таблица Fn

+----+---------+-------------+
| id |  fn_id  | created_at  |
+----+---------+-------------+
|  1 |    10   |  SOME TIME  |
|  2 |    11   |  SOME TIME  |
|  3 |    12   |  SOME TIME  |
|  4 |    14   |  SOME TIME  |
+----+---------+-------------+

И пользовательский ввод, который дает мне метку времени ($ user_timestamp).

Теперь мне нужно получить все товары, где

products.fn_id is 10 
fn.fn_id is 10  
fn.created == $user_timestamp

Модель продуктов имеет такое соотношение:

public function fn() {
        return $this->hasMany('App\FN', 'fn_id', 'fn_id');
}

Теперь я попробовал несколько вещей, таких как запрос where, где я хочу проверить, равны ли fn_id для обоих значений «10» и значение create_at таблицы fn равно $ user_timestamp.

Однако я не смог этого сделать.

$products = Products::with('fn')->where('fn.fn_id', function ($query) use ($user_timestamp) {
            $query->where([['fn_id', 10],['created_at', $user_timestamp]]);
        })->get();

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

попробуйте

$id_to_search=10;
$products = Products::with('fn')->where('fbn_id',$id_to_search)->whereHas('fn', function($q) use($user_timestamp,$id_to_search){
    $q->where('fn_id', $id_to_search)->where('created_at', $user_timestamp);
})->get();
0 голосов
/ 22 мая 2019

Вы должны будете использовать whereHas для ограничения Products на основе fn.

$products = Products::with('fn')->whereHas('fn', function($q) use($user_timestamp){
    $q->where('fn_id', 10)->where('created_at', $user_timestamp);
})->get();
...