Yii2. Model terkait

Saya memiliki 3 model: Item, Serial, dan SerialsCategories. Ketika saya menampilkan formulir Item (untuk membuat atau memperbarui) saya perlu menunjukkan serial yang termasuk dalam kategoriId yang dipilih pada langkah sebelumnya. Sebuah serial dapat dimiliki lebih dari satu kategori.

Saat ini saya memiliki model Item saya:

public function getSerialsTypeByCategory() {
        return (new SerialType)->getByCategory($this->itemCategoryId);
    }

Pada model SerialType saya:

public function getByCategory($itemCategoryId) {

        return SerialTypeItemCategory::find()->select(['serialTypeId'])->where(['itemCategoryId' => $itemCategoryId])->all();

    }

Ini berfungsi, melakukan apa yang saya perlukan tetapi ... Apakah ini cara yang tepat? apakah ada cara yang lebih baik?


person Eduardo    schedule 25.07.2016    source sumber
comment
menurut saya benar .. kodenya berada di tempat yang tepat (model) dan ditulis dengan cara yang benar (pengambil)   -  person scaisEdge    schedule 25.07.2016


Jawaban (1)


tidak salah apa yang kamu lakukan. tetapi ada sesuatu yang lebih - periksa tautan ini: Berfungsi dengan Data Relasional

jika Anda menggunakan ->hasOne dan ->hasMany untuk mendefinisikan relasi, model Anda mendapatkan beberapa manfaat tambahan, seperti bergabung dengan pemuatan lambat atau bersemangat:

Item::findOne($id)->with(['categories'])->all();

dengan suatu relasi, Anda juga dapat menggunakan ->link dan ->unlink, untuk menambah/menghapus data terkait tanpa harus memikirkan bidang tertaut.

Selanjutnya, mudah untuk mendefinisikan relasi melalui tabel persimpangan:

class Order extends ActiveRecord
{
    public function getItems()
    {
        return $this->hasMany(Item::className(), ['id' => 'item_id'])
            ->viaTable('order_item', ['order_id' => 'id']);
    }
}
person e-frank    schedule 25.07.2016
comment
Terima kasih banyak!, saya akan meneliti tentang viaTable, pertama kali saya melihatnya. - person Eduardo; 25.07.2016