Почему только некоторые laravel маршруты возвращают атрибуты модели? - PullRequest
0 голосов
/ 07 августа 2020

Я изучаю laravel, но сомневаюсь ..

Контроллер

namespace App\Http\Controllers;

use App\ItemNfe;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class ItensNfeController extends Controller
{
public function edit($id,ItemNfe $itemNfe)
    {
        //i don´t want to have to make this select below
        //$itemNfe = DB::table('itens_nfe')->where('id_itemnfe',$id)->get();

        // dd($itemNfe); this dd() returns model attributes on few of my controllers only
        return view...
    }...

Модель: (примечание i´ m не использует laravel соглашение, но оно информировано)

namespace App;

use Illuminate\Database\Eloquent\Model;

class ItemNfe extends Model
{
    protected $table = 'itens_nfe';

    protected $primaryKey = 'id_itemnfe';

    protected $fillable = [
        'id_itemnfe','fk_venda', 'fk_produto'...
    ];

    public function nfe()
    {
        return $this->belongsTo('App\Nfe'); //this is one diference among others models, but apparently doesn´t affects when i tested without this code.
    }
}

Маршрут, который я использую, одинаков для всех .. "маршруты ресурсов" В первых двух я возвращаю атрибуты, но не на последнем ...

    Route::resource('/usuarios', 'UsuariosController');
    Route::resource('/nfes', 'NfesController');
    Route::resource('/itensnfe', 'ItensNfeController');

Используемый URL: https://localhost/erpoverweb/public/itensnfe/1/edit

Если вам нужен дополнительный код, пожалуйста, скажите мне ... спасибо!

Ответы [ 2 ]

1 голос
/ 07 августа 2020

Если вы не хотите вручную искать запись в базе данных, вы можете использовать Laravel Контейнер, выполняющий внедрение зависимостей. https://laravel.com/docs/7.x/container#introduction

public function edit(ItemNfe $itemNfe)
{
    // Returns the model, and you didn't need to manually searched.
    // Laravel automaticly injects this for you.
    dd($itemNfe);
}
0 голосов
/ 07 августа 2020

Похоже, вы ищете Связывание модели маршрута (при этом неявно). Для этого необходимо, чтобы имя параметра маршрута и имя параметра сигнатуры метода для этого маршрута совпадали.

public function edit(ItemNfe $itensnfe)

Маршрут ресурса с именем ресурса 'itensnfe' должен соответствовать параметру 'itensnfe'.

Если вы не сделаете эти совпадения, вы просто получите инъекцию зависимостей, которая внедрит новый экземпляр модели.

Laravel 7.x Документы - Маршрутизация - Связывание модели маршрута - Неявное связывание

...