من فضلك ضع في اعتبارك أن Toyi هو أفضل طريقة للقيام بذلك ، كنت أحاول فقط جعل هذا الأمر بسيطًا قدر الإمكان بالنسبة لك ، ولكنه 100 ٪ حول Eager Loading لأنه أكثر كفاءة.
إذن ، استخدامك لعلاقة واحد لكثير ، حيث يكون نموذج عملائك هو الأصل ، ولكن الآن جعل نموذج الفاتورة معكوسًا ، فأول شيء عليك أولاً التأكد من أن كل فاتورة تحتوي على "رقم_العميل" الصحيح الذي يخزن معرف كل عميل في كل فاتورة. أود أيضًا أن أكون آمنًا وأتأكد من أنه يبحث عن المعرّف الصحيح لتعيين نماذجك على هذا النحو.
نموذج العميل
public function invoices() {
return $this->hasMany('App\Invoice', 'client_id');
}
نموذج الفاتورة
public function clients() {
return $this->belongsTo('App\Client', 'client_id');
}
ثم في وحدة التحكم الخاصة بك يمكنك سحب تلك البيانات مثل ذلك.
$client = Client::where('name','like', '%' . Input::get('name') . '%')->orWhere('lastname', 'like', '%' . Input::get('name') . '%')->get();
foreach($client->invoices as $invoice) {
echo $invoice->title; //Or What ever data you need to pull from your invoice.
}
يرجى ملاحظة أنني أضفت أيضًا الطريقة التي ستضيف بها هذا الإدخال إلى عبارة orWhere و where. ضع في اعتبارك أن "٪" يساعد في التحقق من نسبة غير متوقعة في مربع إدخال المستخدم.
مع حريصة التحميل
تحديث لهذا المنصب أرى أن لديك الرمز التالي:
$invoices = Facture::with('client')->where(function($q) {
$key = Input::get('client');
$q->where('nom', 'LIKE', '%'.$key.'%');
$q->orWhere('prenom', 'LIKE', '%'.$key.'%');
})->get();
ما سأفعله هو أنني سأمرر المدخلات بهذه الطريقة لأنها قد تصلح الخطأ.
$key = Input::get('client');
$invoices = Facture::with('client')->where(function($q) or ($key) {
$q->where('nom', 'LIKE', '%'.$key.'%');
$q->orWhere('prenom', 'LIKE', '%'.$key.'%');
})->get();
السبب وراء ذلك هو أن Eager يتم تحميله لأي سبب من الأسباب لا يمكنه وضع السلاسل والمتغير من الجانب الخارجي ، لذا قمت بتعيين المتغير إليه عن طريق تمريره مع الوظيفة وقمت بإدخال $ key قبل الفواتير $. إذا كان ذلك منطقيًا. هتاف أمل هذا يعمل لك.