Laravel eloquent - يمنع تجاوز القيم عند الانضمام إلى الجداول
سؤال
حسنًا، لدي النموذجين التاليين: Account
و Role
class Account extends Eloquent
{
protected $table = 'account';
/* [...] */
public function group() {
return $this->belongsTo('Group');
}
}
و
class Role extends Eloquent {
protected $table = 'role';
public function accounts() {
return $this->hasMany('Account');
}
}
وجداول قاعدة البيانات: account
و role
account
-------
id
name
role_id (nullable)
role
----
id
name
والآن الأمر هو:
أحتاج أن أطلب accounts
بواسطة role.name
عمود.ولكن بعد قيم الانضمام (أو leftJoin) يتم تجاوزها بتلك الموجودة في الجدول الثاني.إليك بعض التعليمات البرمجية:
$response = Account::with('role')->leftJoin('group', 'group.id', '=', 'account.group_id')->get();
بعد ذلك القيم ل id
و name
غير صحيحة في المجموعات الفصيحة.
أيضًا، أحتاج إلى العودة لتكون نماذج من النوع البليغ لأنني أرجع الاستجابة بتنسيق JSON، حيث من المهم أنه لاحقًا في JS (بعد تحليل JSON) يمكنني القيام بذلك فقط account.role.name
.
تغيير أسماء الحقول في الجداول (مثل:المعرف -> account_id، و:id -> role_id) سيكون حلاً بديلاً، ولكن هذه ليست حالتي - تحتاج إلى تسمية المفتاح الأساسي id
لكل طاولة.
تحرير] نعم ، لذا فإن السؤال هو ببساطة:كيفية حل تلك المشكلة؟
المحلول
يمكنك استخدام "تحديد" كما تفعل في استعلام SQL عادي:
$response = Account::with('role')
->select('account.*')
->leftJoin('group', 'group.id', '=', 'account.group_id')
->get();
نصائح أخرى
استكمالا للإجابة التي قدمها @خشب الزان, ، يمكنك استخدام الاسم المستعار داخل عبارة التحديد الخاصة بك، وبهذه الطريقة يمكنك فقط جلب المفاتيح المحددة التي تحتاجها، على سبيل المثال.
Account::with('role')
->select('account.id AS account_id', 'role.id AS role_id', 'account.name AS account_name', 'role.name AS role_name')
->leftJoin('group', 'group.id', '=', 'account.group_id')
->get();