Laravel eloquent - يمنع تجاوز القيم عند الانضمام إلى الجداول

StackOverflow https://stackoverflow.com//questions/24018304

  •  21-12-2019
  •  | 
  •  

سؤال

حسنًا، لدي النموذجين التاليين: 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();

http://laravel.com/docs/queries#selects

نصائح أخرى

استكمالا للإجابة التي قدمها @خشب الزان, ، يمكنك استخدام الاسم المستعار داخل عبارة التحديد الخاصة بك، وبهذه الطريقة يمكنك فقط جلب المفاتيح المحددة التي تحتاجها، على سبيل المثال.

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();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top