[英]PHP Laravel, Replacement for method updateOrCreate
以下問題是更大項目的一部分。 作為一名大三學生,我得到了替換 Laravel 用於創建令牌的方法 updaterOrCreate 的任務。 使用的方法是:
public function creaOUp(
string $token,
string $carId,
int $exDate,
string $log,
int $driverId
): DriverToken {
$token = DriverToken::onWriteConnection()->updateOrCreate([
'car_id' => $carId,
'driver_id' => $driverId
], [
'token' => $token,
'ex_date' => $exDate,
'login' => $log,
]);
return $token;
}
在項目中調用方法是這樣的:
private $driverTokenRepository;
//....
return $this->driverTokenRepository->creaOUp(
(string)$jwt,
$deviceData->uid,
$jwt->getClaim('exp'),
$claims->getLogin(),
$claims->getDriverParentId()
//....
我已經替換了方法 updateOrCreate 的方法:
public function creaOUp(
string $token,
string $carId,
int $exDate,
string $log,
int $driverId
): DriverToken {
$token = DriverToken::query()
->where([
'car_id' => $carId,
'driver_id' => $driverId,
])
->first();
if ($token !== null) {
$token->update([
'token' => $token,
'car_id' => $carId,
'ex_date' => $exDate,
'login' => $log,
]);
} else {
$token = DriverToken::create([
'token' => $token,
'car_id' => $carId,
'ex_date' => $exDate,
'login' => $log,
'driver_id' => $driverId,
]);
}
return $token;
}
我確信它會起作用,但是我遇到了錯誤:
"SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'token' cannot be null (SQL: insert into `driver_tokens` (`token`, `car_id`, `ex_date`, `login`, `driver_id`) values (?, cba567D1, 2425452525, HUGO_315, 3))"
我做錯了什么? 為什么令牌為空? 使用原始 Laravel 的 updateOrCreate 就可以了,也許我真的不明白這個方法?
解決了:
首先,感謝桑迪的幫助,這是我在 StackOverflow 上的第一篇文章:D
問題出在參數 $token 上。 它被用作字面上的標記和查詢。 我剛剛將查詢中的 $token 更改為:
public function creaOUp(
string $token,
string $carId,
int $exDate,
string $log,
int $driverId
): DriverToken {
$quer = DriverToken::query()
->where([
'car_id' => $carId,
'driver_id' => $driverId,
])
->first();
if ($quer !== null) {
$quer->update([
'token' => $token,
'car_id' => $carId,
'ex_date' => $exDate,
'login' => $log,
]);
} else {
$quer = DriverToken::create([
'token' => $token,
'car_id' => $carId,
'ex_date' => $exDate,
'login' => $log,
'driver_id' => $driverId,
]);
}
return $quer;
}
它解決了這個問題。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.