Я новичок в Laravel и пробую метод firstOrNew
Eloquent, как описано в документации .
У меня есть следующая таблица в MySQL:
SELECT * FROM `ratings`;
+----+-----------+-----------+--------+---------------------+---------------------+
| id | realty_id | client_id | rating | created_at | updated_at |
+----+-----------+-----------+--------+---------------------+---------------------+
| 1 | 67 | 29548 | -1 | 2019-03-23 12:14:32 | 2019-03-23 12:26:57 |
| 2 | 67 | 29549 | 1 | 2019-03-23 12:14:53 | 2019-03-23 12:14:53 |
| 3 | 67 | 29547 | 1 | 2019-03-23 12:20:47 | 2019-03-23 12:20:47 |
| 4 | 67 | 29546 | 1 | 2019-03-23 12:24:47 | 2019-03-23 12:26:52 |
+----+-----------+-----------+--------+---------------------+---------------------+
4 rows in set (0,00 sec)
В Laravel моя модель Rating
настроена следующим образом:
<?php
namespace App\Models;
use App\Models\BaseModel;
class Rating extends BaseModel
{
protected $table = 'ratings';
protected $fillable = [
'client_id',
'realty_id',
'rating',
];
public function realty()
{
return $this->belongsTo('App\Models\Realty');
}
public function client()
{
return $this->belongsTo('App\Models\Client');
}
}
Когда я пытаюсь извлечь существующую запись, пропустив существующие client_id
и realty_id
, яполучить ожидаемый результат:
$rating = Rating::firstOrNew([
'client_id' => 29548,
'realty_id' => 67,
]);
dd([$rating->client_id, $rating->realty_id]);
/*
Results in
array:2 [▼
0 => 29548
1 => 67
]
*/
Однако, когда я пытаюсь использовать тот же код с несуществующим client_id
(скажем, это его первая отправка рейтинга), я получаю null
для обоих свойств:
$rating = Rating::firstOrNew([
'client_id' => 29550, // THIS ID IS NOT IN THE `ratings` TABLE
'realty_id' => 67,
]);
dd([$rating->client_id, $rating->realty_id]);
/*
Results in
array:2 [▼
0 => null
1 => null
]
*/
Если я пытаюсь использовать firstOrCreate
вместо firstOrNew
, я получаю внутреннюю ошибку сервера со следующим сообщением:
SQLSTATE [23000]: целостностьнарушение ограничения: 1452 Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется (aptoadmi_aptovc
. ratings
, CONSTRAINT realty_ratings_fk
FOREIGN KEY (realty_id
) ССЫЛКИ realties
(id
) ON УДАЛИТЬ КАСКАД ВКЛОБНОВЛЕНИЕ КАСКАДА) (SQL: вставить в ratings
(updated_at
, created_at
) значения (2019-04-09 17:44:09, 2019-04-09 17: 44:09))
Что ожидается, поскольку значения client_id
и realty_id
не передаются в оператор INSERT
.
Что яделаешь неправильно?