laravel-如何查找外键值

s4n0splo  于 2021-06-18  发布在  Mysql
关注(0)|答案(3)|浏览(306)

第一次使用laravel和php。我试图在表配置文件中插入一行,其中属性uid是引用用户表上uid的外键,但出现了错误。如何只插入概要文件的summary属性并自动设置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');
    }
}
h5qlskok

h5qlskok1#

好吧,有几件事需要解决:
使用 capitalised letter . 它是 Profile 不是 profile . 也要避免复数。更多关于这方面的内容可以通过阅读 PSR-x ;
你在这件事上偏离了拉威尔的方式 foreign keys . 因此,您需要在关系中指定要连接的键:
另外,请注意我是如何将方法名从user->users更改的

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

以及您的个人资料关系:

public function profiles(){
    return $this->hasOne(profile::class, 'uID', 'id');
}
lmyy7pcs

lmyy7pcs2#

欢迎来到拉威尔:)
在用户方法的概要文件模型上,需要定义外键。 public function user(){ return $this->belongsTo(user::class, 'uID'); } 如果不提供外键,它将查找 user_id 现场。

b4wnujal

b4wnujal3#

嗨,把你的数据库放在这里,给模型加上外键

相关问题