Попытка получить свойство необъекта при попытке получить ID в Laravel - PullRequest
0 голосов
/ 19 марта 2019

Я хочу оставить заявку, где начальник может принять или отклонить запрос на отпуск

Моя таблица в базе данных, как это

id |    name     |      email           | person_in_charge |
1      Michael        michael.com                2
2      Johan          johan.com                  4
3      Lorem          lorem.com                  2
4      Ipsum          ipsum.com                  5
5      Dolor          dolor.com

Хочу, если пользователь с логином 5 логин, он может просмотреть все запросы. Если пользователь с идентификатором 2 авторизован, он может просматривать запрос на отпуск с идентификаторами пользователя 1 и 3. Если пользователь с идентификатором 4 авторизуется, он может просматривать запрос на отпуск с идентификатором пользователя 2, идентификатором пользователя 1 и идентификатором пользователя 3.

Я использую во время цикла, но у меня появляется сообщение об ошибке «Попытка получить свойство не-объекта»

Вот код

    $id='5';

    $query= Users::where('id',$id)->first();

    if($query->pic_for==null)
    {
        $query = Users::where('pic_for',$id)->first();
        $pic_for = $query->id;

        $pic=array($query->id);
        while($pic_for!=null)
        {
            $query2 = Users::where('pic_for',$pic_for)->first();
            //dd($query2);
            if($query2->pic_for==null)
            {
                break;
            }else
            {
                $pic[]=$query2->id;
                $pic_for = $query2->id;
            }

        }
        dd($pic);
    }

Вы знаете, где я пропустил?

Спасибо

Ответы [ 2 ]

1 голос
/ 19 марта 2019

Я бы попробовал это:

// prepare an empty $result collection that will store the ids of the users
$result = collect();

// probably a number, not a string, in your database: we should keep the right type
$id = 5;
addRelatedUsersToResult($id, &$result);

dd($result);

// add all the related users ids to the result 
// and call itself for each realted user (to check their relations)
function addRelatedUsersToResult($id, &$result) {
    $relatedUsers = Users::where('pic_for', $id)->get();

    // add the related users and checks their children
    foreach ($relatedUsers as $relatedUser) {
        $result->push($relatedUser->id);
        addRelatedUsersToResult($relatedUser->id, $result);
    }    
}
0 голосов
/ 19 марта 2019

Попробуйте:

$user = Users::find(5); //get the inital user
$picFor = $user->pic_for; //get its pointer
$pictures = []; //initialize the result array
while (!is_null($user) && !is_null($picFor)) { //if I have a valid user and pointer
  $user = Users::find($picFor); //get the user for the pointer
  if ($user !== null) { //if I have a valid user
    $picFor = $user->pic_for; //get the next pointer
    $pictures[]= $user->id; //add the user id to the result array
  }   
}

Основная проблема, с которой вы столкнулись, заключается в том, что вы пропускаете некоторые нулевые проверки.

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