- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试更新一个 orders 表,该表具有通过 customer_id 链接到客户表的外键约束。
迁移文件(100% 有效):
Schema::create('orders', function (Blueprint $table) {
$table->integer('order_id')->unsigned()->index();
$table->integer('customer_id')->unsigned()->index();
$table->foreign('customer_id')->references('customer_id')->on('customers')->onDelete('cascade');
$table->string('order_status');
$table->string('customer_note')->nullable();
$table->timestamp('order_date');
$table->timestamps();
$table->softDeletes();
$table->primary(['order_id', 'customer_id']);
});
在我的模型中,我已将以下各列设为可填充,以便 Laravel 不会忽略它们:
protected $fillable = [
'order_id', 'customer_id', 'order_status', 'customer_note', 'order_date',
];
当我创建/更新订单时,我在 OrderController 的 update 方法下使用以下代码行。我使用 firstOrCreate() 来确保如果订单因某种原因被删除或从未添加,这不会失败。
$order = Order::firstOrCreate(['order_id' => $request->input('id')]);
$order->order_id = $request->input('id');
$order->customer_id = $request->input('customer_id');
$order->order_status = $request->input('status');
$order->customer_note = $request->input('customer_note');
$order->order_date = $request->input('date_created');
$order->save();
当我尝试更新订单时,我在日志文件中收到以下错误消息:
Next Illuminate\Database\QueryException: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`vcc-backoffice`.`orders`, CONSTRAINT `orders_customer_id_foreign` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`customer_id`) ON DELETE CASCADE) (SQL: insert into `orders` (`order_id`, `updated_at`, `created_at`) values (76, 2017-09-08 08:55:37, 2017-09-08 08:55:37)) in /home/vagrant/Projects/vcc-backoffice/vendor/laravel/framework/src/Illuminate/Database/Connection.php:647
我注意到插入语句只尝试插入 3 列。 order_id
、updated_at
、created_at
我假设无法创建该行,因为外部 *customer_id** 列没有被填充,但我无法弄清楚为什么 Laravel 忽略它们。
我想也许输入的格式不正确,但即使将 customer_id 硬编码为 1 也不起作用。 (customer_id 1 存在于客户表中)。
我还检查并确认了 $request->input('customer_id') 包含正确的整数,在本例中为 1,并且确实作为记录存在于顾客表。
我怀疑 Laravel 忽略了相关列,但我不明白为什么。
我的模型文件如下所示:
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Notifications\Notifiable;
use Illuminate\Database\Eloquent\SoftDeletes;
class Order extends Model
{
use Notifiable;
use SoftDeletes;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'order_id', 'customer_id', 'order_status', 'customer_note', 'order_date',
];
/**
* Whether the primary key auto-increments.
*
* @var bool
*/
public $incrementing = false;
/**
* Set the primary key.
*
* @var string
*/
protected $primaryKey = ['order_id', 'customer_id'];
protected $with = ['products'];
/**
* The products that belong to the Order.
*/
public function products()
{
return $this->belongsToMany('App\Product','order_product','order_id','product_id')
->withPivot('qty')
->withTimeStamps();
}
/**
* The customer that belongs to the Order.
*/
public function customer()
{
return $this->belongsTo('App\Customer');
}
}
最佳答案
如果
firstOrCreate
无法根据您提供的属性获取行,它将创建一个新的数据库条目,但不允许创建没有 customer_id
的新行,因为您已在该列上添加了外键,并且它不能为 null
。
将 null
添加到您的列中,
$table->integer('customer_id')->unsigned()->index()->nullable();
或将 firstOrCreate
更改为:
$order = Order::where('order_id', $request->input('id'))->first() ?: new Order;
关于php - Laravel 5.4 忽略 $fillable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46112759/
这就是 Laravel 文档所说的: To get started, you should define which model attributes you want to make mass as
我已经设置了变量 $fillable在我的模型中。我想测试 update功能,我收到此错误: SQLSTATE[42S22]: Column not found: 1054 Unknown colum
我有模型: use seoTrait; protected $fillable = [ 'name', 'title', 'description' ]; 我在 $fillable 中创建了特
我正在尝试更新一个 orders 表,该表具有通过 customer_id 链接到客户表的外键约束。 迁移文件(100% 有效): Schema::create('orders', function
在我 Controller 的更新操作中,我正在做: $fields = $request->all(); $snippet = Snippet::findOrFail($id); $snippet-
所以当我在我的 Laravel 5 网站上发帖请求时出现这个错误: Cannot redeclare App\Subscription::$fillable 这是我的 SubscriptionCont
我有一个简单的模型 IsolatedQuery,它由一个 name 和 query 字段组成。我已经在模型的 $fillable 属性中定义了这两个字段。 IsolatedQueryControlle
我有两个可填写的 pdf 文件,并编写了将这些 pdf 合并为一个 pdf 的代码。下面是我的代码。 public void PDFSplit() { List files=new List(
我有一个具有以下验证规则的用户 Controller : public function store(Request $request) { ... $this->validate($
User.php代码,在这里,无论我使用 fillable 还是 gaurded,我都会得到同样的错误。 'datetime', ]; } UserController.php代码,在这里,
我是一名优秀的程序员,十分优秀!