Почему я не могу получить Попытка получить свойство ошибки необъекта здесь? - PullRequest
0 голосов
/ 07 апреля 2019

Я сделал формат MVC в PHP, и я получаю ошибку Trying to get property of non-object, потому что рутинный объект равен нулю, и вы видите, что он ложный.Короче говоря, здесь происходит то, что я получил объект $ event, у которого есть рутинный_идентификатор, и я ищу объект рутины, который имеет тот же рутинный_идентификатор, что и объект события, однако я получаю эту ошибку:

none Примечание: Попытка получить свойство необъекта в G: \ 5-м семестре \ Ecommerce \ xampp \ htdocs \ app \ controllers \ Event.php в строке 13 bool (false) aaaaaaaaaaaaaaaaaaarray (1) {[0] => object(Event_model) # 6 (8) {["name"] => NULL ["user_id"] => NULL ["рутинный_ид"] => строка (2) "20" ["год"] => строка (4)"2019" ["month"] => string (1) "3" ["day"] => string (2) "27" ["event_id"] => string (1) "3" ["_connection":protected] => объект (PDO) # 7 (0) {}}}

Я пытаюсь использовать var_dump $ рутина и $ событие, поэтому $ событие показывает рутинный_идентификатор, но $ рутина равна нулю.

Код тестирования:

var_dump($routine);
echo "aaaaaaaaaaaaaaaaaa";
var_dump($event);

public function index($y, $m, $d) {
    $event = $this->model('Event_model');
    $event = $event->getEventsbydate($y, $m, $d);

    $routine = $this->model('Routine_model'); 
    $routine = $routine->getRoutine($event->routine_id);

    if($event == false){ //if there is nothing in the workout_list

        header("location:/Event/create/$y/$m/$d"); //mylist controller , create method
    } else {
        var_dump($routine);
        echo "aaaaaaaaaaaaaaaaaa";
    var_dump($event);

        //header('location:/Routine/index_bycalendar/$event->routine_id'); 
    }
}

<?php
//for event
public function insert() {
$stmt = $this
    ->_connection
    ->prepare("INSERT INTO event(routine_id, year, month, day) VALUES(:routine_id, :year, :month, :day)");
$stmt->execute(['routine_id' => $this->routine_id, 'year' => $this->year, 'month' => $this->month, 'day' => $this->day]);
return $stmt->rowCount();
}

public function getEventsbydate($year, $month, $day) {
    $stmt = $this
        ->_connection
        ->prepare("SELECT * FROM event WHERE year = :year AND month = :month AND day = :day");
    $stmt->execute(['year' => $year, 'month' => $month, 'day' => $day]);
    $stmt->setFetchMode(PDO::FETCH_CLASS, "Event_model"); //datatype user
    return $stmt->fetchAll();
}

public function getRoutine($routine_id) {
    $stmt = $this
        ->_connection
        ->prepare("SELECT * FROM routine WHERE routine_id = :routine_id");
    $stmt->execute(['routine_id' => $routine_id]);
    $stmt->setFetchMode(PDO::FETCH_CLASS, "Routine_model"); //datatype user
    return $stmt->fetch(); //it should return a user
}

1 Ответ

0 голосов
/ 07 апреля 2019

При звонке ...

$event = $event->getEventsbydate($y, $m, $d);

это должно запустить SQL, а затем вернуть ...

return $stmt->fetchAll();

и затем вы используете $event в

$routine = $routine->getRoutine($event->routine_id);

НО fetchAll() возвращает массив событий, поэтому, если вы ожидаете только одно событие, то вы можете сделать одно из ...

return $stmt->fetch();

для использования fetch(), чтобы просто вернуть одну строку, или

$routine = $routine->getRoutine($event[0]->routine_id);

Так что используйте $event[0], чтобы выбрать первый ряд.

Возможно, у вас будет несколько событий, в этом случае вам может понадобиться цикл и создать несколько Routine_model с.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...