【问题标题】:Eloquent\model injection into method returns nullEloquent\model 注入方法返回 null
【发布时间】:2016-12-01 15:02:09
【问题描述】:

我在使用注入 Eloquent 到控制器方法中获取模型时遇到问题 - 它在 URL 中找不到使用 id 的模型。 我记得我在其他控制器中更改了

DB::setFetchMode(PDO::FETCH_ASSOC);

dd($infrastructure) 只返回有关模型的元数据:

Infrastructure {#257 ▼
#table: "infrastructures"
#fillable: array:10 [▶]
#connection: null
#primaryKey: "id"
....
} 

我的控制器方法:

public function show(Infrastructure $infrastructure)
{

    $card = [];
    $card['name'] = $infrastructure->name;
    $card['id'] = $infrastructure->id;
    $card['type'] = "infrastructure";
    $card['items']['manufacturer'] = $infrastructure->manufacturer;
    $card['items']['type'] = $infrastructure->infrastructuretype()->first()-   >name;
    $card['items']['kind'] = $infrastructure->kind()->first()->name;
    $card['items']['serial'] = $infrastructure->serial;
    $card['items']['more info'] = Crypt::decrypt($infrastructure->long_desc);

    $title = 'Infrastructure details ';

    $warranty_left = $infrastructure->warranty_date > $infrastructure->purchase_date ? (new Carbon($infrastructure->warranty_date))->diffInDays(new Carbon($infrastructure->purchase_date)) : 0;

    return view('infrastructure.show', compact('infrastructure', 'card', 'title'));
}

我的路线:

Route::model('infrastructure', 'App\Infrastructure');


Route::group(['middleware' => 'auth'], function () {
Route::resource('infrastructure', 'InfrastructureController');
get('infrastructure/{infrastructure}/logs', [
    'uses' => 'InfrastructureController@showInfrastructureLogs'
]);
resource('infrastructuretype', 'InfrastructureTypeController');


Route::get('auth/logout', 'Auth\AuthController@getLogout');

});

【问题讨论】:

    标签: laravel laravel-5.1 laravel-routing


    【解决方案1】:

    我不知道为什么这停止工作但正在运行

    php artisan route:clear
    php artisan route:cache 
    

    工作。

    【讨论】:

      【解决方案2】:

      在您的路线文件中将Route::model('infrastructure', 'App\Infrastructure'); 更改为Route::bind('infrastructure', 'App\Infrastructure');

      【讨论】:

        【解决方案3】:

        您的 Route::resource 使用复数名称定义通配符,这将使通配符成为“基础设施”。

        您正在将“基础设施”通配符绑定到模型,这仅适用于您的 showInfrastructureLog 方法。

        您可以在控制台中使用此命令显示每个资源的完整路径:

        php artisan route:list
        

        您可以通过更改轻松解决此问题

        Route::model('infrastructure', 'App\Infrastructure');
        

        Route::model('infrastructure', 'App\Infrastructure');
        

        (我从来没有亲自使用 Route::model 进行模型绑定,总是从 RouteServiceProvider 进行,但我认为它有效)

        还将“infrastructure/{infrastructure}/logs”中的通配符更改为“infrastructures”

        【讨论】:

        • 我不明白什么变化。你写了相同的行。
        • Route::model('infrastructures', 'App\Infrastructure');应该是第二个,我的错
        猜你喜欢
        • 1970-01-01
        • 2020-03-21
        • 2017-09-30
        • 1970-01-01
        • 2014-07-30
        • 1970-01-01
        • 1970-01-01
        • 2013-02-25
        • 2016-04-27
        相关资源
        最近更新 更多