<i id='aLu49'><tr id='aLu49'><dt id='aLu49'><q id='aLu49'><span id='aLu49'><b id='aLu49'><form id='aLu49'><ins id='aLu49'></ins><ul id='aLu49'></ul><sub id='aLu49'></sub></form><legend id='aLu49'></legend><bdo id='aLu49'><pre id='aLu49'><center id='aLu49'></center></pre></bdo></b><th id='aLu49'></th></span></q></dt></tr></i><div id='aLu49'><tfoot id='aLu49'></tfoot><dl id='aLu49'><fieldset id='aLu49'></fieldset></dl></div>
    1. <legend id='aLu49'><style id='aLu49'><dir id='aLu49'><q id='aLu49'></q></dir></style></legend>
    2. <small id='aLu49'></small><noframes id='aLu49'>

      <tfoot id='aLu49'></tfoot>

        • <bdo id='aLu49'></bdo><ul id='aLu49'></ul>

        自动注入的 Laravel 模型没有属性

        时间:2023-09-22
      1. <legend id='sgxOb'><style id='sgxOb'><dir id='sgxOb'><q id='sgxOb'></q></dir></style></legend>

              • <bdo id='sgxOb'></bdo><ul id='sgxOb'></ul>

                <small id='sgxOb'></small><noframes id='sgxOb'>

                <tfoot id='sgxOb'></tfoot>
                <i id='sgxOb'><tr id='sgxOb'><dt id='sgxOb'><q id='sgxOb'><span id='sgxOb'><b id='sgxOb'><form id='sgxOb'><ins id='sgxOb'></ins><ul id='sgxOb'></ul><sub id='sgxOb'></sub></form><legend id='sgxOb'></legend><bdo id='sgxOb'><pre id='sgxOb'><center id='sgxOb'></center></pre></bdo></b><th id='sgxOb'></th></span></q></dt></tr></i><div id='sgxOb'><tfoot id='sgxOb'></tfoot><dl id='sgxOb'><fieldset id='sgxOb'></fieldset></dl></div>
                    <tbody id='sgxOb'></tbody>
                  本文介绍了自动注入的 Laravel 模型没有属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  我是 Laravel 的新手.我已经为我的一个表创建了一个模型、一个资源控制器和一个路由,我修改了模型类以使用特定的表名,但是 Laravel 5.4 注入的模型对象没有属性,即使相应的记录存在于数据库.这是我采取的步骤.

                  I'm new to Laravel. I have created a model, a resource controller, and a route for one of my tables, I have modified the model class to use a particular table name, but the model object injected by Laravel 5.4 has no attributes even though a corresponding record exists in the database. Here are the steps I took.

                  1) 使用工匠创建模型.我运行了这个命令:

                  1) Create the model with artisan. I ran this command:

                  php artisan make:model Tree
                  

                  2) 将 Tree 模型类修改为 instructed 以指定特定表.我必须这样做,因为我的表被命名为 tree,而不是 Laravel 根据其内部规则假设的树".

                  2) Modify the Tree model class as instructed to specify a specific table. I had to do this because my table is named tree, not the "trees" as Laravel would otherwise assume based on its internal rules.

                  /**
                   * The table associated with the model.
                   *
                   * @var string
                   */
                  protected $table = 'tree';
                  

                  3) 创建一个资源控制器,通过这个命令使用我的模型

                  3) Create a resource controller that makes use of my model with this command

                  php artisan make:controller CategoryController --resource --model=Tree
                  

                  4) 添加资源路由 routes/web.php 以将 Web 服务器路径映射到控制器:

                  4) Add a resource route routes/web.php in order to map a web server path onto the controller:

                  Route::resource('categories', 'CategoryController');
                  

                  5) 修改 CategoryController 的 show() 方法,以 var_dump 注入的 $tree 对象.它看起来像这样:

                  5) Modify the show() method of the CategoryController to var_dump the injected $tree object. It looks like this:

                  /**
                   * Display the specified resource.
                   *
                   * @param  AppTree  $tree
                   * @return IlluminateHttpResponse
                   */
                  public function show(Tree $tree)
                  {
                      // we need to display the children of $tree
                      var_dump($tree);
                  
                  }
                  

                  6) 我的表结构遵循 Laravel 文档指定的所有约定.有一个整数 id 列是无符号的 &自动递增.我有 created_at 和 updated_at 时间戳.唯一不同的是表名是树"而不是树",但这应该包含在我上面所做的更改中:

                  6) My table structure follows all the conventions specified by Laravel docs. There is an integer id column that is unsigned & auto-incrementing. I have the created_at and updated_at timestamps. The only thing different is that the table name is "tree" and not "trees", but that should be covered with the change I made above:

                  CREATE TABLE IF NOT EXISTS `tree` (
                    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
                    `parent_id` int(10) unsigned DEFAULT NULL,
                    `label` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
                    `display_order` int(11) unsigned NOT NULL DEFAULT '0',
                    `forum_id` int(5) NOT NULL DEFAULT '0',
                    `url` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
                    `flavor` tinyint(4) NOT NULL DEFAULT '0',
                    `created_at` timestamp NULL DEFAULT NULL,
                    `updated_at` timestamp NULL DEFAULT NULL,
                    PRIMARY KEY (`id`),
                    KEY `parent_pkey` (`parent_id`)
                  ) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
                  

                  此表包含数据.它绝对有一个 id=1 的记录.

                  This table contains data. It most definitely has a record with id=1.

                  7) 我访问了应该激活我的资源控制器的 show() 方法的 url.我得到的输出证实这实际上是 CategoryController::show() 方法.http://example.com/categories/1

                  7) I visit the url which should activate the show() method of my resource controller. The output I get verfies that this is in fact the method CategoryController::show(). http://example.com/categories/1

                  问题来了.

                  var_dump($tree) 的输出没有属性.没有错误,但注入的对象有问题.

                  object(AppTree)#217 (24) {
                    ["table":protected]=>
                    string(4) "tree"
                    ["connection":protected]=>
                    NULL
                    ["primaryKey":protected]=>
                    string(2) "id"
                    ["keyType":protected]=>
                    string(3) "int"
                    ["incrementing"]=>
                    bool(true)
                    ["with":protected]=>
                    array(0) {
                    }
                    ["perPage":protected]=>
                    int(15)
                    ["exists"]=>
                    bool(false)
                    ["wasRecentlyCreated"]=>
                    bool(false)
                    ["attributes":protected]=>
                    array(0) {
                    }
                    ["original":protected]=>
                    array(0) {
                    }
                    ["casts":protected]=>
                    array(0) {
                    }
                    ["dates":protected]=>
                    array(0) {
                    }
                    ["dateFormat":protected]=>
                    NULL
                    ["appends":protected]=>
                    array(0) {
                    }
                    ["events":protected]=>
                    array(0) {
                    }
                    ["observables":protected]=>
                    array(0) {
                    }
                    ["relations":protected]=>
                    array(0) {
                    }
                    ["touches":protected]=>
                    array(0) {
                    }
                    ["timestamps"]=>
                    bool(true)
                    ["hidden":protected]=>
                    array(0) {
                    }
                    ["visible":protected]=>
                    array(0) {
                    }
                    ["fillable":protected]=>
                    array(0) {
                    }
                    ["guarded":protected]=>
                    array(1) {
                      [0]=>
                      string(1) "*"
                    }
                  }
                  

                  我做错了吗?如何让 Laravel 注入正​​确的对象?

                  有人问我为什么在我的路线中注入了错误的对象.这是在步骤 #3 中自动生成的类的缩写版本.它清楚地引用了 Tree 类和它期望一个树对象的代码提示.除了 var_dump 语句之外,我没有创建任何这些代码.它都是按照文档的指示由工匠命令自动生成的.

                  Someone asked why I was injecting the wrong object in my route. Here is an abbreviated version of the class that was auto-generated in step #3. It clear references the Tree class and code-hints it is expecting a tree object. I did not create any of this code except the var_dump statement. It was all auto-generated by artisan commands expressly as instructed by the docs.

                  namespace AppHttpControllers;
                  
                  use AppTree;
                  use IlluminateHttpRequest;
                  
                  class CategoryController extends Controller
                  {
                  
                      /**
                       * Display the specified resource.
                       *
                       * @param  AppTree  $tree
                       * @return IlluminateHttpResponse
                       */
                      public function show(Tree $tree)
                      {
                          // we need to display the children of $tree
                          var_dump($tree);
                  
                      }
                  
                  }
                  

                  推荐答案

                  Route Model 绑定有一个命名约定.

                  There is a naming convention on Route Model binding.

                  尝试将操作调用更改为:

                  Try to change the action call to this:

                  public function show(Tree $category)
                  {
                      var_dump($category);
                  }
                  

                  更新:我查看了源代码,您也可以更改资源路由声明中的参数名称:

                  Update: I looked in the source and you can also change the parameters name in resource Route declaration:

                  Route::resource('categories', 'CategoryController', ['parameters'=>['categories'=>'tree']]);
                  

                  并在动作调用中使用 $tree 变量

                  And use the $tree variable in action call

                  public function show(Tree $tree)
                  

                  这篇关于自动注入的 Laravel 模型没有属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:未定义的表:7 错误:关系“费用";不存在 下一篇:如何在 Laravel 5 中使用 orderBy Desc 获得平均值

                  相关文章

                  最新文章

                    <bdo id='aIaqB'></bdo><ul id='aIaqB'></ul>
                • <tfoot id='aIaqB'></tfoot>

                  1. <i id='aIaqB'><tr id='aIaqB'><dt id='aIaqB'><q id='aIaqB'><span id='aIaqB'><b id='aIaqB'><form id='aIaqB'><ins id='aIaqB'></ins><ul id='aIaqB'></ul><sub id='aIaqB'></sub></form><legend id='aIaqB'></legend><bdo id='aIaqB'><pre id='aIaqB'><center id='aIaqB'></center></pre></bdo></b><th id='aIaqB'></th></span></q></dt></tr></i><div id='aIaqB'><tfoot id='aIaqB'></tfoot><dl id='aIaqB'><fieldset id='aIaqB'></fieldset></dl></div>

                    <small id='aIaqB'></small><noframes id='aIaqB'>

                    <legend id='aIaqB'><style id='aIaqB'><dir id='aIaqB'><q id='aIaqB'></q></dir></style></legend>