niloofar noorbakhsh
niloofar noorbakhsh
خواندن ۱ دقیقه·۳ سال پیش

نکات لاراولی 1


سلام بچه ها تو این پست میخوام راجع به یکی از نکات لاراول صحبت کنم

تفاوت

1- $model->relation() ,
۲- $model->relation


اگه بطور خلاصه بخوایم بگیم اولی یک object از relation مورد نظر رو برمیگردونه و دومی result از relation مورد نظر برمیگردونه

حالا بریم مفصل توضیح بدیم ببینیم اینا یعنی چی:

حالت اول که توضیحش ساده است.

فرض کنید یک مدل user داریم و یک مدل post. و توی مدل user هم متد زیر رو داریم

public function posts(){
return $this->hasMany(' ');
}

وقتی مینویسیم ()user->post$ در واقع داریم همین متد رو صدا میکنیم که instance از

Illuminate\database\Eluquent\Relations\hasmany

است.

از این فانکشن زمانی استفاده میشود که بعد از آن بخواهیم query قبل از اجرا بنویسیم.

$user->posts()->where()->get();


حالت دوم :

لاراول این امکان رو میده که مستقیم به result یک relation به عنوان property دسترسی داشته باشیم.

$model->relation

که در واقع

Illuminate\Database\Eloquent\Model

هست

این property در اصل وجود ندارد و وقتی این را مینویسیم درواقع تابع get__ را صدا میزند

public function __get($key){
return $this->getAttribute($key);
}

متد getAttribute چک میکند که آیا relation لود شده ( توی relation های موجود) اگر نبود relation موجود را لود کند.


public function getAttribute($key){
if(array_key_exists($key , $this->relations)){
return $this->relations[$key];
} $CameKey=camel_case($key); if(method_exists($this , $CameKey)) { return $this->getRelationshipFromMethod($key,$camelkey) } }


در نهایت لاراول متد getResult را روی relation کال میکند و سپس متد get را روی querybuilder .

نتیجه ای مشابه زیر میدهد.


$model->relation()->get()

خلاصه ی مطلب:

1- $model->relation()

یک object از relation را برمیگرداند.

Illuminate\database\Eluquent\Relations\hasmany

2- $model->relation

یک کالکشن که result از query relation هست رو برمیگردونه.

Illuminate\database\Eluquent\Relations\collection


3- $model->relation()->get()


یک کالکشن که result از query relation هست رو برمیگردونه.

Illuminate\database\Eluquent\Relations\collection

دقیقا مثل 2


امیدوارم که این مطب بدردتون خورده باشه ?

لاراولآموزشphpفریمورکبرنامه نویسی
شاید از این پست‌ها خوشتان بیاید