محسن مهری
5 سال پیش توسط محسن مهری مطرح شد
2 پاسخ

سوال در مورد ساخت توابع در modal

درود این مدال من با نام tag هستش :

class Tag extends Model
{
protected $fillable=['tag','foreign_id','usage'];
protected $casts=['tags'=>'array'];
public $timestamps=false;
public function TagSentences(){
return $this->whereUsage('sentence');
}
public function TagStartLetter($key){
return $this->where('tag', 'like', $key.'%');
}
public function TagWords(){
return $this->whereUsage('word');
}
}

حالا چرا خط کد زیرم جواب نمیده :

$object=new Tag();
// return $object->TagWords()->get(); //worked
// return $object->TagStartLetter('a')->get(); //worked
// return $object->TagWords()->TagStartLetter('s')->get(); // not worked

یعنی نمیتونم توابع رو روی هم فراخونی کنم ؟ درصورتی که مشکلی نباید داشته باشه چون انگار دو تا where رو پشت سر هم فراخونی میکنم؟
پیشاپیش ممنونم


فلاتر
تگ‌های محبوب
ثبت پرسش جدید
فخرالدین لنگی
تخصص : برنامه نویس وب، آندروید و سیست...
@fakhraddin 5 سال پیش مطرح شد
1

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

public function TagStartLetter($key){
return $this->where('tag', 'like', $key.'%');
}

خیلی راحت می تونی بنویسی

public function scopeTagStartLetter($query, $key){
return $query->where('tag', 'like', $key.'%');
}

و هر جا نیاز داشتی استفاده کنی

Tag::tagStartLetter('s')->get();

بازم سوالی بود یا کمکی لازم داشتید بفرمایید


محمد امیری
تخصص : backend coder
@mohammadeng3731 5 سال پیش آپدیت شد
1

سلام.
نبایدم جواب بده چون در انتهای tagwords باید $this رو return کنید

class fakeString
{
private $str;
function __construct()
{
$this->str = "";
}
function addA()
{
$this->str .= "a";
return $this;
}
function addB()
{
$this->str .= "b";
return $this;
}
function getStr()
{
return $this->str;
}
}
$a = new fakeString();
echo $a->addA()->addB()->getStr();
This outputs "ab"

فخرالدین لنگی
تخصص : برنامه نویس وب، آندروید و سیست...
@fakhraddin 5 سال پیش مطرح شد
1

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

public function TagStartLetter($key){
return $this->where('tag', 'like', $key.'%');
}

خیلی راحت می تونی بنویسی

public function scopeTagStartLetter($query, $key){
return $query->where('tag', 'like', $key.'%');
}

و هر جا نیاز داشتی استفاده کنی

Tag::tagStartLetter('s')->get();

بازم سوالی بود یا کمکی لازم داشتید بفرمایید


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

ورود یا ثبت‌نام