【问题标题】:How to store foreign key in table如何在表中存储外键
【发布时间】:2018-04-23 21:58:21
【问题描述】:

我想在page_master 表中存储一个外键,而外键来自business_master 表。

这是我的控制器方法:

$page = new Page();
$page->page_name = Input::get('page_name');
$page->page_url  = Input::get('page_url');
$page->business()->business_id;
$page->save();

$resultArray = ['status' => 1, 'message' => 'Page url added!', dataArray' => $page];

我的 page_master 模型:

protected $table = 'page_master';
protected $fillable = ['business_id','page_url','page_name'];

public function business()
{
    return $this->hasMany('App\Business','business_id','id');
}

这里的外键是business_id,但是当我提出这个请求时,它说:

ErrorException:未定义属性:Illuminate\Database\Eloquent\Relations\HasMany::$business_id

如何将 business_id 存储为外键?任何帮助将不胜感激!

                    $table->increments('id');
        $table->integer('business_id')->unsigned();
        $table->string('page_url')->unique();
        $table->string('page_name');
        $table->tinyInteger('is_live')->nullable();
        $table->timestamps();

【问题讨论】:

  • 不,这里没问题
  • 请提供任何其他解决方案
  • 请提供Page模型的迁移。
  • 我添加迁移请看

标签: php laravel foreign-keys


【解决方案1】:

其实错误就在这一行:

$page->business()->business_id;

您正在尝试从关系对象中获取属性。

你应该在保存模型后尝试使用attach函数:

$businessId = Input::get('business_id');
$page->business()->attach($businessId);

关于外键问题,您需要在迁移文件中使用foreign:

$table->foreign('business_id')->references('id')->on('business_master');

看这里:https://laravel.com/docs/5.6/migrations#foreign-key-constraints

【讨论】:

    【解决方案2】:

    这段代码应该适合你。

    $page = new Page();
    $page->page_name = Input::get('page_name');
    $page->page_url  = Input::get('page_url');
    $page->business_id = $businessId;
    $page->save();
    

    错误是由这行代码产生的$page->business()->business_id;其实是用来检索关系数据的。

    人们也使用 attach $page->business()->attach($businessId); 但我更喜欢简单。因此,我始终坚持这个约定 $page->business_id = $businessId;

    在迁移中添加外键:

    $table->increments('id');
    $table->integer('business_id')->unsigned();
    $table->string('page_url')->unique();
    $table->string('page_name');
    $table->tinyInteger('is_live')->nullable();
    $table->foreign('business_id')->references('id')->on('business_master');
    $table->timestamps();
    

    如果您使用 foreign_key,您必须考虑级联操作。要了解有关外国约束的更多信息,请查看document

    【讨论】:

      猜你喜欢
      • 2015-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-29
      • 1970-01-01
      • 1970-01-01
      • 2019-11-03
      • 1970-01-01
      相关资源
      最近更新 更多