Установить переменные класса для ключей ассоциативного массива с тем же именем? - PullRequest
0 голосов
/ 06 декабря 2018

Я делаю сайт, используя Laravel.У меня есть Model для сообщений.У меня есть статический метод getPost, который должен создать новый экземпляр моей Post модели с использованием ассоциативного массива столбцов в таблице posts.

. Я хотел бы иметь соответствующие переменные вPost класс модели, имя которого совпадает с именем столбца в таблице.

т.е.

Posts:
 _________________________________________________
|  id  |  title  | ...etc |                       |
|-------------------------------------------------|
|  1   |  This   |        |                       |
|-------------------------------------------------|
|  2   |  That   |        |                       |

Тогда в моем классе:

<?php

class Post extends Model
{
    public $id, $title;

    public function __construct(array $attributes = [], $data = null)
    {
        parent::__construct($attributes);

        if(!is_object($data)) return;

        /*Set $this->title = $data->title, $this->id = $data->id
          Except a quicker way to set variables of the same name to
          the corresponding key in the array without having to do the above
          for every single variable, which will become a problem as the
          the table grows and holds more data which is what I anticipate.*/
    }

    static public function getPost($id)
    {
        $temp = new Post();
        $post = DB::table($temp->getTable())->where('id', $id)->first();

        return new Post([], $post);
    }
}

Так же, как язаявил, что я хочу, чтобы переменные в моем классе с тем же именем, что и ключи в ассоциативном массиве, были автоматически установлены в их значения.Я не знаю ни одного способа сделать это в настоящее время.При необходимости я могу установить их вручную в конструкторе, но мне просто интересно, есть ли более простой и менее болезненный способ сделать это?Как какая-то функция или нет.

Спасибо за любую помощь или совет!

1 Ответ

0 голосов
/ 06 декабря 2018

Вы пробовали это?

foreach($data as $key => $value) {
    $this->$key = $value;
}
...