Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 12.08.2018 01:04:21

Как в laravel организовать роуты для элемента с составными ключами?

Добрый день:

Есть миграция:

class CreatePricesTable extends Migration
{
    public function up()
    {
        Schema::create('prices', function (Blueprint $t) {
            $t->primary(['vehicle_id','days']);
            $t->decimal('price');
            $t->integer('vehicle_id')->default(1)->index;
            $t->foreign('vehicle_id')->references('id')->on('vehicles')->onDelete('cascade');
            $t->integer('days');
            $t->timestamps();
            $t->softDeletes();
        });
    }

    public function down()
    {
        Schema::dropIfExists('prices');
    }
}

Первое что приходит в голову - обозначить в RouteServiceProvider:

Route::bind('price', function ($days, $price) {
            return Price::where([
                'days' => $days,
                'price' => $price,
            ]);
        });

routes/web

Route::group([
                'as' => 'prices.',
                'prefix' => 'prices',
            ], function() {

                Route::get('{days}/{price}/edit', 'PricesController@edit')->name('edit');

                Route::get('create', 'PricesController@create')->name('create');
                Route::get('{days}/{price}', 'PricesController@show')->name('show');
                Route::post('', 'PricesController@store')->name('store');
                Route::put('{days}/{price}', 'PricesController@update')->name('update');
                Route::delete('{days}/{price}', 'PricesController@destroy')->name('destroy');
            });
        });

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

public function edit(Price $price)
    {
        dd($price);
}

$price Не проглатывается(

Object of class Illuminate\Database\Eloquent\Builder could not be converted to string


Получается в любом случае придется писать аргументы такого вида:

public function edit($days, $price) {
        $price = Price::where([
            'days' => $days,
            'price' => $price
        ])->first();
...
}

И RouteServiceProvider тут никак не поможет?

Не в сети

Подвал раздела