Laravel - Как найти значение внешнего ключа - PullRequest
0 голосов
/ 07 декабря 2018

впервые работаю с Laravel и PHP.Я пытаюсь вставить строку в таблицу profile , где атрибут uID является внешним ключом, ссылающимся на uID в таблице user , но получаю ошибки.Как мне вставить только итоговый атрибут профиля и установить uID (внешний ключ) автоматически.Я могу без проблем вставлять пользователей с uID.Вот мои файлы модели и контроллера.Спасибо!

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

namespace App;

use Illuminate\Database\Eloquent\Model;

    class user extends Model
    {
    // specify which attributes can be filled out during registration
    public $timestamps = false;
    protected $fillable=['firstname','lastname','email','password',];

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

модель профиля

namespace App;

use Illuminate\Database\Eloquent\Model;

class profile extends Model
{
    //
    public $timestamps = false;
    protected $fillable = ['summary',];

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

миграция профиля

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateProfilesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
     // create profile table
       Schema::create('profiles', function (Blueprint $table) {
           $table->increments('pID');
           $table->timestamp('created_at')->useCurrent();
           $table->string('summary')->default('');
           $table->unsignedInteger('uID');

           $table->foreign('uID')->references('uID')->on('users')->onDelete('cascade');
       });
   }
}

контроллер профиля

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\profile;

class ProfileController extends Controller
{
    public function create()
    {
        //
        return view('profile.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        // used to store user profile after validation
        $this->validate($request,[
          'summary' => 'required'
        ]);
        $profile = new profile([
          'summary' => $request->get('summary'),
          'uID' => $request->user()->uID
        ]);

        return redirect()->route('profile.create')->with('success','Profile created');
    }
}

Ответы [ 3 ]

0 голосов
/ 07 декабря 2018

Хорошо, пара вещей, с которыми нужно разобраться:

  1. Объявите ваши классы с capitalised letter.Это Profile не profile.Избегайте множественного числа.Подробнее об этом можно прочитать, прочитав о PSR-x;

  2. Вы отклонились от пути laravel в отношении foreign keys.Поэтому вам необходимо указать в ваших отношениях, какие ключи используются для подключения:

Также обратите внимание, как я изменил имя вашего метода для user -> users

public function users()
{
  return $this->belongsTo(user::class, 'id', 'uID');
}

А также для ваших профильных отношений:

public function profiles(){
    return $this->hasOne(profile::class, 'uID', 'id');
}
0 голосов
/ 07 декабря 2018

привет, поставьте свою базу данных здесь и добавьте forign ключ к модели

0 голосов
/ 07 декабря 2018

Добро пожаловать в Laravel:)

В вашем профиле Модель по пользовательскому методу вам нужно определить внешний ключ.

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

Если вы этого не сделаетевведите внешний ключ, он будет искать поле user_id.enter image description here

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