Я пытаюсь обновить определенный столбец в другой таблице после вставки новой записи в Laravel в другую таблицу. Я попытался проверить его после i save()
и проверить, есть ли конкретная запись, куда вставить обновленное значение. Безрезультатно, я попробовал обычный orm, db фасадные материалы, необработанный запрос, и ни один из них не работал. Создание записи работает, но получение идентификатора созданной записи и использование его для обновления столбца в другой таблице - нет. Это должно, но это не работает. Кажется, я не вижу ничего очевидного ... Могу использовать пару sh глаз, заранее спасибо.
Код:
public function store(Request $request)
{
if($request->isMethod("post")){
$city = new City;
$city->Name = $request->Name;
$city->CountryCode = $request->CountryCode;
$city->District = $request->District;
$city->Population = $request->Population;
$country = Country::findOrFail($request->CountryCode);
if($city->save() && $country){
//$country->Capital = $city->ID;
//$country->save();
DB::table('country')
->where('Code', $city->CountryCode)
->update(['Capital' => $city->ID]);
return new CountryResource($country);
}
}
}
Маршрут:
Route::post("city", "CityController@store");
Модель страны:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Country extends Model
{
protected $table = 'country';
protected $primaryKey = 'Code';
public $incrementing = false;
// In Laravel 6.0+ make sure to also set $keyType
protected $keyType = 'string';
public function capital(){
return $this->hasOne("App\City", "ID","Capital");
}
public function cities(){
return $this->hasMany("App\City", "CountryCode","Code");
}
public function language(){
return $this->hasMany("App\CountryLanguage", "CountryCode","Code");
}
}
Модель города:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class City extends Model
{
protected $table = 'city';
//protected $primaryKey = 'CountryCode';
public function country(){
return $this->belongsTo("App\Country", "CountryCode","Code");
}
public function language(){
return $this->hasMany("App\CountryLanguage","CountryCode", "CountryCode");
}
}
БД - это "мировая" база данных с веб-сайта mysql, в некоторых таблицах нет традиционных праймериз и я только добавил метки времени через миграции. PS: он возвращает ресурс, несмотря на то, что столбец «Капитал» в таблице «страна» не обновляется.
Edit1: Если я, например: $country->Capital = 1;
, это работает. Если я сделаю $country->Capital = $city->ID; or $country->Capital = $city["ID"];
, это не сработает. Это все равно, что не получить значение, несмотря на то, что значение в $city->ID
присутствует, и я проверил его.
Edit2:
Я выбрал его. Вот что сделала работа (по крайней мере, в моем случае):
$country->Capital = City::latest()->first()->ID;
Теперь я просто хочу спросить: есть ли «лучшее» решение, например, как «Laravel способ делать вещи»?