0

次の関係を持つ 2 つのモデルがあります。

class Model_User extends ORM
{
    protected $_has_many = array(
        'images' => array('model' => 'User_Image')
    );
}

class Model_User_Image extends ORM
{
    protected $_belongs_to = array(
        'usedvehicle' => array(),
    );
}

ユーザー画像の数を制限する最良の方法は何ですか? const MAX = 3Model_User_Image クラスで宣言して制限を設定し、この値を使用して現在の の数を確認することを考えていましたimages。関係やルールを介してそれを制限する方法はありますか?

4

1 に答える 1

1

rulesこの問題は、次のようにKohana の -system を使用して実際に解決できます。

Model_User_Image1親の ID に影響する検証ルールを に追加します。Model_Userメソッドを指定してを使用できますmax_no_images

public function rules()
{
    return array(
        'user_id' => array(
            array( array('Model_User', 'max_no_images') ),//automatically use value of the field as parameter
        ),
    );
}

2 を 2 つの方法で変更しModel_Userます。まず、許容される画像の最大数を決定するために、定数またはその他の種類の変数が必要です。max_no_images次に、画像の最大数に達しているかどうかを確認するを定義する必要があります (そうであれば、false を返します)。ORM 経由で簡単に実行できますが、クエリを直接使用すると高速になる場合があります。

public static function max_no_images($user_id)
{
    $number_of_children = ORM::factory('User', $user_id)->children->count_all();
    return ($number_of_children < Model_User::max_children);
 }

ここに投稿されたコードはテストされていませんが、少し異なるバリエーションでテストしたため、この方法は実際に機能します。ドキュメントで、検証のために同じモデルから指定された関数をどのように使用したかを確認してください


この問題に対処できるもう 1 つの方法は、SQL ルールを使用することです。これ以上は言いませんが、画像のエントリを挿入/更新するときに画像の数をチェックする必要があるため、考え方からすると ORM アプローチとまったく同じです。

于 2013-08-20T22:09:07.983 に答える