1

Eloquentモデルを調べて、他のモデルとの関係を見つけようとしています。問題は、関係が単純に単一のメソッドとして定義され、関係の中心的なインデックスが存在しないことです。

public function posts()
{
    return $this->hasMany('Post');
}

すべてのリレーションを検査するには、メソッドのリストを抽出し、 から継承されたものを取り出し、Eloquentそれぞれを実行し、戻り値の型を確認する必要があります。

$all = get_class_methods($model);
$inherited = get_class_methods('Eloquent');
$unique = array_diff($all, $inherited);

foreach($unique AS $method)
{
    $relation = $model->$method();
    if(is_a($relation, 'Illuminate\Database\Eloquent\Relations\Relation'))
    {
        //... this is a relation, do something with it
    }
}

言うまでもなく、これは非常に危険です。この種の検査を別のより安全な方法で行う方法はありますか?

4

1 に答える 1

0

リレーションシップ メソッドに PHPDoc コメントを追加し、PHPリフレクション APIを使用してソースからコメントを抽出できます。

于 2013-05-30T11:10:50.740 に答える