簡體   English   中英

Laravel Eloquent Model 依賴注入,使用預先格式化的 Id 來查找()

[英]Laravel Eloquent Model Dependency Injection with preformated Id to find()

通常我們可以通過在參數中注入User Class 來簡化在 controller 中通過 id 查找用戶的邏輯。 像這樣:

class UserController extends Controller
{
   public function show(User $id)
   {
      return $user;
   }
}

但是現在我必須這樣對待 Id 才能找到:

<?php
namespace App\Http\Controllers;

class UserController extends Controller
{
   public function show(User $id)
   {
      $preformattedId = '98'.$id;

      $user = User::find($preformattedId );

      return $user;
   }
}

我的基本問題是:如何在下面的代碼中對我的預格式化 ID 實現同樣的技巧,就像上面的代碼一樣?

注意:我必須以這種方式使用 ID,因為我使用的舊數據庫實際上在每個 ID 中添加了“98”前綴,盡管我們只使用該前綴之后的字符。

您可以通過在路由器上使用顯式綁定來使用控制反轉。

在您的RouteServiceProvider

/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    parent::boot();

    Route::bind('user', function ($value) {
        return User::find('98'.$value);
    });
}

或在您的User model

/**
 * Retrieve the model for a bound value.
 *
 * @param  mixed  $value
 * @param  string|null  $field
 * @return \Illuminate\Database\Eloquent\Model|null
 */
public function resolveRouteBinding($value, $field = null)
{
    return $this->find('98'.$value);
}

https://laravel.com/docs/7.x/routing#explicit-binding

你可以分享你的路線文件嗎?

但是如果你的文件是

Route::get('user/{id}', 'UserController@show');

當你使用

class UserController extends Controller
{
   public function show(User $id)
   {
      // you don't need use find function, it is make automatic by laravel
      $user = $id;
      return $user;
   }
}

如果您想獲取 id,只需在show參數中刪除User類型

class UserController extends Controller
{
   public function show($id)
   {
      $preformattedId = '98'.$id;

      $user = User::find($preformattedId );

      return $user;
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM