Laravel обновить столбец с последним идентификатором - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь обновить определенный столбец в другой таблице после вставки новой записи в 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 способ делать вещи»?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...