مشکل در sort گریدویو

[font="Tahoma"][rtl]سلام دوستان

من سه تا جدول به شکل زیر دارم:[/rtl][/font]




ads(id, user_id)

tender(id,user_id, ads_id)

user(id)



[font="Tahoma"][rtl] اکشن index توی TenderController رو به این شکل تغییر دادم:[/rtl][/font]




$dataProvider = new ActiveDataProvider([

    'query' => Tender::find()->joinWith(['user', 'ads']),

]);

 

         

         

        $dataProvider->setSort([

                'attributes' => 

                        array_merge(

                                $dataProvider->sort->attributes, [

                                        'user.name',

                                        'ads.name',

                                        'ads.user.name',

                                ]),

        ]);

 

return $this->render('index', [

    'dataProvider' => $dataProvider,

]);



[font="Tahoma"][rtl] گرید ویو هم به این شکل نمایش دادم:[/rtl][/font]




<?= GridView::widget([

       'dataProvider' => $dataProvider,

       'columns' => [

           ['class' => 'yii\grid\SerialColumn'],

 

           'user.name',

           'ads.name',

           'amount',

           'ads.user.name',

 

           ['class' => 'yii\grid\ActionColumn'],

       ],

   ]); ?>



[font="Tahoma"][rtl] تمام اطلاعات به درستی لود می شن و sort ها هم عمل می کنن به جز موقع ایکه روی ads.user.name کلیک می کنم، این پیغام رو میده:[/rtl][/font]




Column not found: 1054 Unknown column 'ads.user.name' in 'order clause'

The SQL being executed was: SELECT `tender`.* FROM `tender` LEFT JOIN `user` ON `tender`.`user_id` = `user`.`id` LEFT JOIN `ads` ON `tender`.`ads_id` = `ads`.`id` ORDER BY `ads`.`user`.`name` LIMIT 20



[font="Tahoma"][rtl] ممنون می شم راهنمایی کنید [/rtl][/font]

[size="4"][right]ads.user.name

بی معنی است

اینجا دقیقا به کدام ستون از کدام جدول خواستید دسترسی داشته باشید؟[/right][/size]

[font="Tahoma"][rtl]یعنی چی بی معنی است؟

ستون name از جدول user با توجه به ارتباطی که با جدول ads داره[/rtl][/font]

[size="4"][right]عباراتی که در

attribute

مینویسید بخشی از کوئری هستند و نه

ORM

پس مشخص کردن رابطه به این شکل برای

MySQL

نامفهوم است.

ضمن این که اگر شرط بخصوصی در

join

مد نظرتون هست همونطور که میدانید باید در قسمت

ON

بنویسید

ستونی که میخواید بهش برسید دقیقا همون

user.name

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

مورد دیگه هم اینه که در

LEFT JOIN

شما فقط ستونهای اولین جدول از سمت چپ را خواهید داشت که اگر بقیه سورتها کار میکنند من فرض رو بر این میزارم که خود

Yii

داره اینو درست میکنه وگرنه باید اسم ستونهای مورد نیاز از بقیه جدولها رو در

SELECT

ذکر کنید چون

MySQL

از

FULL OUTER JOIN

پشتیبانی نمیکنه

من پیشنهاد میکنم برای سریعتر پیشرفتن روند کارتون ابتدا کوئری مورد نظرتون را مستقیما روی جداول اعمال کنید و در صورت مشاهده نتیجه مورد نظر آنرا در فریمورک پیاده سازی کنید تا تصویر دقیقتری از موضوع بدست بیارید

[/right][/size]

[font="Tahoma"][rtl]

[/rtl][/font]

[font="Tahoma"][rtl]خود فریم ورک نمی تونه کاری کنه؟ همون طور که توی رابطه بین دوتا جدول a -> b انجام میده ، بیاد بین سه تا جدول a -> b -> c هم انجام بده؟[/rtl][/font]

[size="4"][right]

چرا فریمورک میتونه پیوند بین بیش از دو رابطه را تشخیص بده ولی اینکه در مورد سوال شما چطور باید ازش استفاده کرد نیاز به فکر و اطلاعات بیشتر هست.

مخصوصا اگر منظورتون را در مورد

بیشتر روشن کنید شاید من بتونم بهتر کمکتون کنم.[/right][/size]

[font="Tahoma"][rtl]

فرض کنید کاربر a وارد می شه و یه درخواست مناقصه توی جدول tender ثبت می کنه که اطلاعات آگهی اون مناقصه توی جدول ads هست

حالا کاربر b که صاحب آگهی هست میاد می بینه که درخواست مناقصه براش ثبت شده

حالا من به از توی مدل tender به فیلدهای user.name و ads.user.name با توجه با ارتباط هایی که هست و relation هایی که توی مدل ها تعریف کردم دسترسی دارم

ولی توی sort فیلد ads.user.name اون اروری که گفتم رو میده

مرسی

[/rtl][/font]