Метод не возвращает правильное значение

#php #oop

#php #ооп

Вопрос:

Я уже целый день ломаю голову над этой проблемой, и я не могу понять, почему мой код ведет себя так. Я использую PDO для получения данных из базы данных, и когда var_dump я $stmt->fetchAll() получаю ожидаемые результаты (массив с 2 объектами), но когда я вызываю метод, и var_dump результатом является объект, который вызывает метод.

Класс user является производным от класса ORM

Код выглядит следующим образом:

В index.php
User::find(1);


В ORM.php

 protected static $table_name;
private $query;

public function __construct()
{
  $this->query = new Query(static::$table_name);
}


public static function find($id, $columns = "*")
{
  $user = User::get($columns, get_called_class(), PDO::FETCH_CLASS);
  return $user;
}

public static function findAll($columns = "*")
{
  return User::get($columns);
}

/**
 * Magic method to call methods
 */
public function __call($method, $args = array())
{
call_user_func_array( array( $this->query, $method ), $args);
return $this;
}

/**
 * Magic method to call static methods
 */
public static function __callStatic($method, $args = array())
{
  $static = new static;
  call_user_func_array( array( $static->query, $method ), $args);
  return $static;
  

}


и в Query.php

  public function get($columns = "*", $class_name = "", $fetch_mode = PDO::FETCH_ASSOC)      
{
   $stm = DB::prepare("select * from user");//the DB class is working properly
   $stm->execute();
   $fetch = $stm->fetchAll();
   var_dump($fetch); // This prints the correct array with 2 users in it
   return $fetch; // doesnt return somehow

}
  

Заранее спасибо, я понятия не имею, как это исправить, так как я рассматриваю эту проблему уже целый день

Комментарии:

1. Не могли бы вы вставить выходные данные как var_dump, так и return ? возможно, у var_dump больше данных, но, не видя двух, я не мог сказать.

2. get не определяется как статический, но вы вызываете, поскольку User::get это статический вызов.

3. @MathewFoscarini get вызывается с помощью метода _callStatic or _call в ORM.php который использует переменную $query.

4. @OliverBS var_dump действительно является другим объектом. Что странно, потому что, насколько я далеко, этого не должно быть. Поскольку возвращаемый объект get метода

5. Не могли бы вы вставить два вывода? может быть, и это долгий путь, у вас есть объект внутри объекта, может быть, hasMany, ManyOne, belongsTwo и т. Д., И возврат просто дает вам верхний уровень

Ответ №1:

Роберт

 User::find(1);

find($id, $columns = "*")
{
  $user = User::get($columns, get_called_class(), PDO::FETCH_CLASS);
  return $user;
  

В вашем вызове find вы передаете 1, который, я думаю, есть $id , но в get вы передаете $columns , что для меня означает, что вы не передаете $id

Таким образом, мне кажется, что вы передаете 1, но ничего с этим не делаете?

Дайте мне знать, если это исправит это?

Комментарии:

1. 1 действительно $id , но это не решает проблему, поскольку в настоящее время я использую User::find() метод для получения всех строк из базы данных. Этот метод должен иметь эту строку return User::where('id=$id')->get(stuff)