PDA

View Full Version : لیمیت در ارتباط های دیتابیس



navid3d_69
چهارشنبه 02 مهر 1393, 11:45 صبح
سلام من یک جدول کاربر دارم و یک جدول که تصاویر کاربر ها را داره و هر کاربر چند تصویر می تونه داشته باشه
این دوتا رو با ارتباط hasmany به هم ارتباط دادم

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

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



User::with('pictures')->orderBy(DB::raw('RAND()'))->take(4)->get();

navid3d_69
چهارشنبه 02 مهر 1393, 13:42 عصر
اینجوری حل میشه




User::with(array('pictures' => function ($query) { $query->groupBy('user_id'); }))->orderBy(DB::raw('RAND()'))->take(4)->get();

ni.alpr
پنج شنبه 10 مهر 1393, 16:18 عصر
groupBy اینجا چه کمکی بهتون کرد ؟

شایدم من منظورتون رو درست متوجه نشدم .
شما اینجا تصمیم دارید کاربری رو با یک عکس رندم بگیرید ؟
یا اینکه قراره کاربرا هم رندم انتخاب بشن ؟

navid3d_69
پنج شنبه 10 مهر 1393, 17:16 عصر
اینجا کاربر رو بصورت رندوم میگیرم و فقط اولین تصویرش رو هم میگیرم

ni.alpr
پنج شنبه 10 مهر 1393, 19:01 عصر
پس چرا از اینgroupBy استفاده کردید . نباید از first استفاده می کردید ؟



User::with(array('pictures' =>function($query){$query->first();}))->orderBy(DB::raw('RAND()'))->take(4)->get();


از این هم استفاده کنید ، ببینید جواب می گیرید یا خیر.
shuffle کار رندوم رو انجام میده .



User::with(array('pictures' =>function($query){$query->first();}))->shuffle()->take(4)->get();

navid3d_69
پنج شنبه 10 مهر 1393, 19:10 عصر
با لیمیت کلا یه رکورد بر می گردونه نه برای هر کاربر یک رکورد

ni.alpr
جمعه 11 مهر 1393, 01:06 صبح
الان شما سعی دارید یک کاربر به صورت رندوم بگیرید ؟ یا چند کاربر ؟

مشکلتون حل شده یا خیر ؟

navid3d_69
جمعه 11 مهر 1393, 01:37 صبح
مشکل حل شده بله من چند کاربر رو بصورت رندم میگیرم