کوئری برای جداول many to many با جدول واسط

ساخت وبلاگ
سلام

من 3 تا جدول دارم به نام های :
project
category
catproject

و مثلا این مقادیر رو دارد:

دسته بندی (category)
1 اندروید
2 وب

پروژه (project)
1 بازار
2 دیوار
3 پونیشا

جدول واسط(catproject)
category project
1 1
1 2
2 3

حالا می خوام مثلا توی دسته بندی اندروید آخرین پروژه رو برگردونه.

تشکر شده توسط:

خیلی ممنون فقط اکتیو رکوردش رو هم بدید عالی می شه.
و همین طور مدل برای catproject یعنی جدول واسطه نیاز هست ؟

تشکر شده توسط:

$project = frontendmodelsProject::find() ->joinWith('catprojects', true) ->where(['category.name' => 'اندروید']) ->all();

نقل قول:

Column not found: 1054 Unknown column 'category.name' in 'where clause'
The SQL being executed was: SELECT `project`.* FROM `project` LEFT JOIN `catproject` ON `project`.`id` = `catproject`.`project_id` WHERE `category`.`name`='اندروید'

و اینم relation هام:

مدل project

public function getCatprojects() { return $this->hasMany(Catproject::className(), ['project_id' => 'id']); }

مدل catproject
public function getCat() { return $this->hasOne(Category::className(), ['id' => 'cat_id']); }
public function getProject() { return $this->hasOne(Project::className(), ['id' => 'project_id']); }

مدل category

public function getCatprojects() { return $this->hasMany(Catproject::className(), ['cat_id' => 'id']); }

تشکر شده توسط:

بجای category اسم جدول رو بگذارین. بجای name هم عنوان دسته‌بندی رو بگذارین که فکر کنم title گذاشتین.

تشکر شده توسط:

$project = frontendmodelsProject::find() ->joinWith('catprojects', true) ->leftJoin('category','`category`.`id`=`catproject`.`cat_id`') ->where(['category.name' => $name]) ->orderBy('id DESC') ->limit(1) ->all();
این کار کرد.
این روش بهترین روش از نظر performance ؟

تشکر شده توسط:

روش خوبیه ولی کلاً بهترین روش وجود نداره. بسته به شرایط مختلف ممکنه دستور مربوطه فرق کنه. تا زمانی که به مشکل خاصی توی کار بر نخوردین، بهترین روش همونی هست که راحتتر میتونید ازش استفاده کنید.

تشکر شده توسط:

برنامه نویس...
ما را در سایت برنامه نویس دنبال می کنید

برچسب : نویسنده : خنجی prog بازدید : 234 تاريخ : دوشنبه 22 شهريور 1395 ساعت: 14:08

خبرنامه