2016-05-29 23 views
3

でモデルを取得しますか?Laravelはテーブル名でモデルを取得する方法はありますテーブル名

例えば、私は、「ユーザー」モデルを持って、そのテーブルは今protected $table = "users"

として定義され、私がやりたいことは、「ユーザー」に等しいテーブル名でモデルを取得することです。

この機能は、より多くの私はどこにでも検索しましたが、私は解決策を見つけることができませんでした、おそらく私は、単純な何かが欠落している可能性がありModel::getTable();

の逆のようなものですか?私は、「ユーザー」を検索するとき、たとえば、私はちょうどURLに打つことができ、アドレスバーにそう

Route::get('/{table}', '[email protected]'); 
Route::get('/{table}/filter', '[email protected]'); 
Route::get('/{table}/sort', '[email protected]'); 
Route::get('/{table}/search', '[email protected]'); 

:私はAPIのようなものを構築してい

EDIT

:コントローラ上の、その後

api/users/search?id=1 

、のようなもの:

+0

あなたが何をしたいのか、私たちに伝えることができますか?何が私の心に来るので、私は、私は私の質問を編集した、このような質問 –

+0

@AchrafKhouadjaを見たときに継承し、依存性逆転のようなものです。あなたがより良い答えに、心の中でうまくフォーマットされた質問の結果を保つ – Defy

+0

ありがとう、私はあなたが私のテーブル名は、モデルのクラス名と同じである場合、これは可能です:)あなたのイゴールに感謝あなたは –

答えて

3

10は、たぶんこのような何かがお手伝いします:

$className = 'App\\' . studly_case(str_singular($tableName)); 

if(class_exists($className)) { 
    $model = new $className; 
} 
+0

探している答えを見つける願っています。 – Defy

+1

しかし、$ table変数は保護されており、静的にアクセスすることはできないため、インスタンスを作成せずにモデルクラスに対して$ tableを取得することはできません。コアモデルクラスを変更することなく、それを行うことはできません –

+0

私はあなたのポイントを得る。 LaravelはCoreModel :: getModelByTableName(文字列) – Defy

1

あなたはどのクラスを呼び出すためにどのテーブル名を決定する必要があります。 私はこれを行う2つの方法を参照してください。

@IgorRynkovoyが

または

が、私はそれが古い問題であることを知っている辞書

public function search($tableName) 
{ 
    $dictionary = [ 
     'table_name' => 'CLASS_NAME_WITH_NAMESPACE', 
     'another_table_name' => 'CLASS_NAME_WITH_NAMESPACE', 
    ]; 

    $className = $dictionary[$tableName]; 
    $models = null; 

    if(class_exists($className)) { 
     $models = $className::all(); 
    } 

    // do some filtering, then return the model 
    return $models; 
} 
2

のいくつかの種類を使用しますが、それが誰かを助けることができる提案として使用Laravelのモデルの命名規則:

public function getModelFromTable($table) 
{ 
    foreach(get_declared_classes() as $class) { 
     if(is_subclass_of($class, 'Illuminate\Database\Eloquent\Model')) { 
      $model = new $class; 
      if ($model->getTable() === $table) 
       return $class; 
     } 
    } 

    return false; 
} 

これはクラス名を返すので、instanする必要がありますそれを調整する。

+0

残念ながらモデルは含まれていません。 –

関連する問題