【问题标题】:How can I get row by passing the slug to dependency injection in Laravel如何通过将 slug 传递给 Laravel 中的依赖注入来获得行
【发布时间】:2019-07-26 11:15:48
【问题描述】:

我试图通过使用依赖注入传递 slug 来获取该行,但 $variable 没有返回任何内容。

控制器方法

public function projectDetails(Project $project_name)
{
    dd($project_name);
}

型号

namespace App\Modules\manufacturer\Models;

use Illuminate\Database\Eloquent\Model;

class Project extends Model
{
    protected $table = 'projects';

    protected $fillable = ['id', 'name'];

    public $timestamps = false;
}

路线

Route::get('manufacturer-project-details/{project_name?}', 
    'ProjectController@projectDetails');

结果

Project {#1047 ▼
  #table: "projects"
  #fillable: array:1 [▼
    0 => "id"
  ]
  +timestamps: false
  #connection: null
  #primaryKey: "id"
  #perPage: 15
  +incrementing: true
  #attributes: []
  #original: []
  #guarded: array:1 [▼
    0 => "*"
  ]
  #dates: []
  #dateFormat: null
  #observables: []
  +exists: false
  +wasRecentlyCreated: false
}

但是,当我dd($project_details) 时,应该返回一行包含项目名称。

【问题讨论】:

    标签: laravel dependency-injection


    【解决方案1】:

    laravel 在模型中为它​​提供了一个神奇的方法,称为 getRouteKeyName

    只需在模型上添加此代码

    public function getRouteKeyName()
    {
        return 'slug'; //change this to desired column name
    }
    

    那么你就可以直接使用你的控制器了

    这里的文档docs

    【讨论】:

    • 你想要过滤的列名是什么?将“slug”更改为您的列名
    • @AbdullahFaraz 只需将 return 'slug'; 更改为 return 'name'; 即可
    【解决方案2】:

    你可以在路由声明或者模型方法docs中指定这个:

    // Route
    
    Route::get('/posts/{post:slug}', function (Post $post) {
        return $post;
    });
    

    // Model
    
    /**
     * Get the route key for the model.
     *
     * @return string
     */
    public function getRouteKeyName()
    {
        return 'slug';
    }
    

    【讨论】:

      【解决方案3】:
       public function projectDetails($project_name)
       {
          $data = Project :: where('project_name','=',$project_name)>get()->toArray();
          dd($data);
       }
      

      试试这个...我不确定..但我认为..您使用在资源路径中工作的方法

      【讨论】:

      • 它有效,但我想以我发布问题的方式使用依赖注入
      【解决方案4】:

      与@Ganesh 的想法相同,但最好先使用,否则失败

      public function projectDetails($projectName)
      {
          $project = Project::where('project_name', '=', $projectName)->firstOrFail();
          dd($project);
      }
      

      这样,如果名称在 tha DB 中不可用,它将返回 404

      但最好在模型上添加一个方法来做同样的事情

      public function projectDetails($projectName)
      {
          $project = Project::findOrFailByName($projectName);
          dd($project);
      }
      

      Project.php

      /**
       * @param string $name
       * @return Project 
       */
      public static function findOrFailByName($name)
      {
          return self::where('name', '=', $name)->firstOrFail();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-16
        • 2023-03-09
        • 2017-05-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-28
        相关资源
        最近更新 更多