Ali Ghaleyan
5 سال پیش توسط Ali Ghaleyan مطرح شد
9 پاسخ

مشکل در fetch کردن یک شی از یک کلاس در php mvc

سلام و خسته نباشید به دوستان عزیز
من یک شی از یک کلاس میسازم و میخوام که وقتی اون شی ساخته شده رو در foreach میزارم یه پراپرتی خاصی مثلا به اسم data داخل حلقه قرار بگیره

class User
{
    protected $data;

    public function get()
    {
        // $data = query for get all users
        $this->data = $data;
    }

    public function __toString()
    {
        return $this->toJson();
    }

    public function toJson()
    {
        return json_encode($this->data, ۰);
    }

    public function __debugInfo()
    {
        return $this->data ? (array)$this->data : [];
    }
}

$users (new User())->get();
foreach ($users as $user) {
    // any command
}

یعنی در اصل میخوام که اون پراپرتی دیتا رو قرار بده داخل foreach

@hesammousavi
@ali.bayat


ثبت پرسش جدید
Ali Ghaleyan
تخصص : برنامه نویس لاراول
@Serjik 5 سال پیش مطرح شد
0

@ali.bayat
با تشکر فراوان ازتون که من رو خیلی به جواب نزدیک کردید
منظور من دقیقا این بود که ... :

class User implements IteratorAggregate
{
    protected $data;
    public function get(){
        // database query
        $this->data = $data;
        return $this;
    }

    public function getIterator()
    {
        return new ArrayIterator($this->data);
    }
} 

$model = (new User());
$users = $model->get();
foreach ($users as $user) {
    var_dump($user);
}

علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
1

قسمت های زیر رو ویرایش کنید

    public function get()
    {
        // $data = query for get all users
        $this->data = $data;
    return $this->data;
    }

$users = (new User())->get();

بعد از رفع این ارورهای سینتکسی باز هم کد شما کار نخواهد کرد، چون مقدار data در متد get بدرستی مقدار دهی نشده--> پس users$ برابر Null خواهد بود و چیزی نیست که در حلقه foreach قرار بگیره


Ali Ghaleyan
تخصص : برنامه نویس لاراول
@Serjik 5 سال پیش مطرح شد
0

@ali.bayat
ممنون از پاسختون اما من میخوام که همچنان خود $this رو به تنهایی برگردونم چون میخوام یک شی از کلاس یوزر ها باشه تا بتونم به طور مثال متد update رو روی هر یوزر صدا بزنم
کاری که لاراول انجام میده


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
1

برگردوندن this$ یا در واقع خود Instance کلاس برای مواقعی هست که بخواهید از چند متد به صورت chain استفاده کنید..

برای کاری که می‌خواهید انجام بدید پیشنهاد میکنم سورس کد ORM لاراول (الکوئنت) رو بررسی کنید.


Ali Ghaleyan
تخصص : برنامه نویس لاراول
@Serjik 5 سال پیش مطرح شد
0

@ali.bayat
تا اینجایی متوجه هستم که دیتا ها داخل یک پراپرتی در کلاس collection ذخیره میشن و وقتی اون شی ساخته شده رو داخل حلقه میزاریم میره و از پراپرتی که دیتا داخلشه مقدار میگیره
اینکه چطور این کار رو انجام میده برام سواله و لازمش دارم


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
1

در کدی که بالاتر به اشتراک گذاشتید، مشکل اصلی این بود که شما data رو مقدار دهی نکردید. و این کار در لاراول به صورت پیچیده‌تری انجام میشه تا این که بصورت دستی مقدار دهی بشه.
در سرتاسر لاراول از Contract ها و Magic متد های زیادی استفاده میشه. ممکنه بعضی متد ها رو نتونید به صورت مستقسم پیدا کنید اما اگر بگردید در سورس کد پیداش میکنید


Ali Ghaleyan
تخصص : برنامه نویس لاراول
@Serjik 5 سال پیش مطرح شد
0

@ali.bayat
مشکل کد بالا رو متوجه شدم
فقط نمیخوام که پراپرتی data رو برگردونم فقط میخوام که $this برگرده تا بتونم کارای بیشتری رو روش انجام بدم
و اینکه داخل حلقه پراپرتی data واکشی بشه


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
1

نمونه های استفاده از Collection هارو در لینک‌های زیر بررسی کنید
https://www.sitepoint.com/collection-classes-in-php/
https://coderwall.com/p/4inomq/php-collections


Ali Ghaleyan
تخصص : برنامه نویس لاراول
@Serjik 5 سال پیش مطرح شد
0

@ali.bayat
با تشکر فراوان ازتون که من رو خیلی به جواب نزدیک کردید
منظور من دقیقا این بود که ... :

class User implements IteratorAggregate
{
    protected $data;
    public function get(){
        // database query
        $this->data = $data;
        return $this;
    }

    public function getIterator()
    {
        return new ArrayIterator($this->data);
    }
} 

$model = (new User());
$users = $model->get();
foreach ($users as $user) {
    var_dump($user);
}

علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
1

خواهش می‌کنم. موفق باشید


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

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