【问题标题】:Laravel find data by modelLaravel 按模型查找数据
【发布时间】:2017-12-06 17:29:59
【问题描述】:

当我尝试编辑数据库上的某些列(例如1)时,当我在地址栏上运行此 url 时,我正在尝试调试数据:

http://127.0.0.1:8000/content_category/1/edit

我得到了这个结果:

ContentCategories {#246 ▼
  #table: "contents_categories"
  #guarded: array:1 [▶]
  #connection: null
  #primaryKey: "id"
  #keyType: "int"
  +incrementing: true
  #with: []
  #withCount: []
  #perPage: 15
  +exists: false
  +wasRecentlyCreated: false
  #attributes: []
  #original: []
  #changes: []
  #casts: []
  #dates: []
  #dateFormat: null
  #appends: []
  #dispatchesEvents: []
  #observables: []
  #relations: []
  #touches: []
  +timestamps: true
  #hidden: []
  #visible: []
  #fillable: []
}

这个结果中的数据是null,我没有关于id=1的任何信息

这列数据存在于数据库中,我检查了phpmyadmin,我在控制器上的edit 函数是:

public function edit(ContentCategories $contentCategories)
{
    dd($contentCategories);
}

Model 在项目中:

class ContentCategories extends Model
{
    protected $table = 'contents_categories';
    protected $guarded = ['id'];
}

路线:

Route::resource('content_category', 'ContentCategoriesController');

【问题讨论】:

  • 你能提供你的路线定义吗
  • @lagbox Route::resource('content_category', 'ContentCategoriesController');
  • @lagbox 并发布更新
  • 执行php artisan route:list 来检查它是如何定义的,它最终在URI 中使用的参数是什么?这对于隐式模型绑定很重要
  • @lagbox 我得到这个输出content_category/{content_category}/edit | content_category.edit | App\Http\Controllers\ContentCategoriesController@edit

标签: laravel laravel-5


【解决方案1】:

您需要更新方法签名才能在此处使用隐式路由模型绑定。

“Laravel 自动解析在路由或控制器操作中定义的 Eloquent 模型,其类型提示的变量名称与路由段名称匹配。” Laravel 5.5 Docs - Routing - Implicit Model Binding

public function edit(ContentCategories $content_category)

这会将路由参数名称与您的类型提示参数名称相匹配。这将允许绑定发生。如果没有这些参数名称的匹配,您拥有的类型提示参数将通过依赖注入解析为该模型的新实例。它必须解决依赖关系,这样你才能得到一个新的模型实例,因为它不知道它是你想要绑定的参数。

其他信息:

“默认情况下,Route::resource 将根据资源名称的‘单一化’版本为您的资源路由创建路由参数。”

Laravel 5.5 Docs - Controllers - Resource Controllers - Naming Resource Route Parameters

【讨论】:

  • 你能帮我为什么在这段代码中我得到空数组吗? public function show(Contents $manage_contents) { dd($manage_contents); },我的路线是:Route::resource('manage_contents', 'ContentsController');,网址是:http://127.0.0.1:8000/manage_contents/5提前谢谢
  • 和以前一样的答案...运行php artisan route:list并查看路由是如何注册的
【解决方案2】:

在你的控制器编辑方法中试试这个

public function edit($id)
{
    $contentCategories = ContentCategories::find($id);
    dd($contentCategories);
}

【讨论】:

    猜你喜欢
    • 2016-03-31
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 2019-05-16
    • 2019-02-03
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    相关资源
    最近更新 更多