WedX - журнал о программировании и компьютерных науках

Неопределенное свойство: Illuminate \ Database \ Eloquent \ Relations \ HasOne :: $ user_id

Я только новичок в laravel, извините, если это глупый вопрос

Вот мой контроллер: -

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\User;
use App\Profile;
use Auth;



class ProfilesController extends Controller
{

  public function _construct()
  {
    $this->middleware('auth');
  }

  public function create()
  {
    return view('bio');
  }

  public function store(Request $request)
  {
  auth()->user()->profile()->user_id;
    // create Bio
    $profile = new Profile;

    $profile->bio = $request->input('bio');
    $profile->save();
    return redirect('/home');

  }


}

Вот моя модель: -

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Profile extends Model
{
  protected $gaurded = [];
protected $fillable = ['user_id', 'bio'];

    public function user()
    {
      return $this->belongsTo(User::class);
    }
}

Вот мои столы

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Profile extends Model
{
  protected $gaurded = [];
protected $fillable = ['user_id', 'bio'];

    public function user()
    {
      return $this->belongsTo(User::class);
    }
}

Вот моя модель пользователя: -

  public function profile()
    {
      return $this->hasOne(Profile::class);
    }

    public function posts()
    {
      return $this->hasMany(Posts::class);
    }

Я получаю эту ошибку: «Неопределенное свойство: Illuminate \ Database \ Eloquent \ Relations \ HasOne :: $ user_id» Я не знаю, где я ошибся, пожалуйста, помогите мне и помогите мне, если можете < strong> Спасибо

27.03.2020

  • к сведению, опечатка в $gaurded. Что auth()->user()->profile()->user_id; должно делать? 28.03.2020
  • auth()->user()->profile->user_id; вместо auth()->user()->profile()->user_id; 28.03.2020
  • Как вы сказали @TsaiKoga, я попробовал auth () - ›user () -› profile- ›user_id;, но я получил следующую ошибку: Попытка получить свойство user_id не-объекта 28.03.2020
  • @AnonymousChatbox, поскольку профиль отсутствует, это означает, что у пользователя нет профиля. Почему бы тебе просто не использовать $id = auth()->id(); 28.03.2020
  • Вот что у меня получилось SQLSTATE [HY000]: Общая ошибка: 1364 Поле user_id не имеет значения по умолчанию Я тоже новичок в кодировании, так что извините, если вас злит моя глупость 28.03.2020
  • @AnonymousChatbox Я не злюсь, братан. У меня есть ответ, вы можете попробовать. 28.03.2020

Ответы:


1

Вы не можете вызвать атрибут user_id на Illuminate\Database\Eloquent\Relations\HasOne profile(),

Вы можете назвать это auth()->user()->profile->user_id.

Однако у пользователя еще нет профиля. Необходимо создать его и использовать метод create в Illuminate\Database\Eloquent\Relations\HasOne, Laravel автоматически построит foreign_key user_id до profile.

  public function store(Request $request)
  {
      auth()->user()->profile()->create([
         'bio' => $request->input('bio')
      ]);
      return redirect('/home');
  }
28.03.2020
  • THAAAAANNKKSS брат ... я знаю, что это слишком много, чтобы просить, но можем ли мы сообщить как-нибудь, чтобы вы могли помочь мне в будущем .. 28.03.2020

  • 2

    В модели вашего профиля

    public function profile()
    {
      return $this->hasOne(Profile::class,"user_id","id");
    }
    

    В вашем контроллере

      public function store(Request $request)
      {
           echo $id = auth()->user->profile->user_id; 
           $input = $request->all();
           $input['user_id'] = auth()->id(); // OR auth()->user->profile->user_id;
           Profile::create($input);
           return redirect('/home');
      }
    
    28.03.2020
  • он показывает ошибку Undefined property: Illuminate \ Auth \ AuthManager :: $ user 28.03.2020
  • проверить обновленный ответ $input['user_id'] = auth()->id(); 28.03.2020
  • спасибо за ответ ... я нашел решение, в котором я не создавал профиль 28.03.2020
  • Пожалуйста, выберите этот ответ :) 28.03.2020
  • если ты хочешь, чтобы я был 31.03.2020

  • 3

    вам необходимо определить внешний ключ и локальный ключ в пользовательской модели следующим образом:

    public function profile()
    {
      return $this->hasOne(Profile::class,"user_id","id");
    }
    
    27.03.2020
  • он показывает ошибку Undefined property: Illuminate \ Auth \ AuthManager :: $ user 28.03.2020
  • позвольте мне увидеть ваш код в пользовательской модели и контроллере, я попробовал и работаю со мной 28.03.2020
  • Я добавил модель User в свой вопрос, и я уже получил ответ, что команда create отсутствовала. Спасибо за ответ. 28.03.2020

  • 4

    Я предполагаю, что ваша цель - установить отношения один на один.

    В этом отношении вам необходимо определить отношение hasOne в пользовательской модели.

    public function profile()
    {
        return $this->hasOne(Profile::class);
    }
    

    и принадлежит к модели профиля

    public function user()
    {
        return $this->belongsTo(User::class);
    }
    

    и не забудьте указать user_id в таблице вашего профиля.

    проверьте эту ссылку для получения дополнительной информации.

    После этих шагов, если у вас есть авторизованный (аутентифицированный) пользователь, вы можете получить поле user_id в таблице профиля следующим образом:

    use Illuminate\Support\Facades\Auth;
    
    
    Auth::user()->profile->user_id; 
    
    27.03.2020
  • Да, я уже сделал это, и, как вы сказали, я изменил его на auth () - ›user-› profile- ›user_id; , но по-прежнему отображается эта ошибка Неопределенное свойство: Illuminate \ Auth \ AuthManager :: $ user 28.03.2020
  • хорошо, я нашел решение, ваш синтаксис для получения информации об аутентифицированном пользователе должен быть таким: Auth :: user () - ›Profile-› user_id; Auth - это Illuminate \ Support \ Facades \ Auth 28.03.2020
  • Спасибо за ответ Но я нашел решение, я не создавал профиль, поэтому я не смог передать данные. Еще раз спасибо 28.03.2020
  • Новые материалы

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


    Для любых предложений по сайту: [email protected]