У меня есть простая модель:
class Model
{
public function find($name) {
return mysqli_query($con, 'select * from table where name = "'.$name.'"');
}
public function first($rows) {
foreach ($rows as $row) {
return $row;
}
}
}
Я хочу сделать что-то вроде этого:
$model = new Model;
$model->find('test')->first();
Но это не работает
Fatal error: Call to undefined method mysqli_result::first()
Это работает, если я использую $model->first($model->find('test'))
но это действительно некрасиво Что я должен изменить, чтобы достичь $model->find('test')->first()
звонишь?
class TestModel{
private $con;
private $results;
/**
* Why not use dependency injection here. It will decouple the classes.
*
* @param \DatabaseConnection $con
*/
public function __construct(DatabaseConnection $con)
{
$this->con = $con;
}
public function find()
{
$this->results = mysqli_query($this->con, 'SELECT * FROM `table` where `name` = ' . $name) // Again you should really bind these.
return $this;
}
public function where($field, $field_value)
{
$this->results = mysqli_query($this->con, 'SELECT * FROM `table` where `' . $field . '` = ' . $field_value); // Again you should really bind these.
return $this;
}
public function first()
{
foreach ($this->results as $row)
{
return $row;
}
}
}
Теперь вы можете использовать $model->find('test')->first();
Других решений пока нет …