関連するモデルの一部の値を更新しようとしましたが、新しい値を割り当ててsave()
またはpush()
データベースでは更新されません。それ以上に、実行はそれらのメソッドで停止し、私が見ることができるのは空白のページだけです。エラーも、何もない、それは単にreturn文にも達しません。 try-catchを使用すると、save()
またはpush()
はスキップされます。私は「フィールドを持つLaravel 5:保存/プッシュメソッドを使用して関連するモデル値を更新する際に問題が発生しただけで動作しない
<?php namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Product extends Model
{
protected $table = "products";
public $timestamps = false;
public $fillable = [
...
];
public function userProduct()
{
return $this->belongsTo("\\App\\Models\\UserProduct", "id", "product_id");
}
}
UserProductモデル:ここで
は(ちょうど私が現在何をしようとしているに関連していないフィールドとメソッドなし) 製品モデルであり、更新しようとM:コントローラから<?php namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class UserProduct extends Model
{
protected $primaryKey = null;
public $incrementing = false;
protected $table = "user_product";
public $fillable = [
...
"is_featured",
"is_hidden_from_latest"
...
];
public function product()
{
return $this->belongsTo("\\App\\Models\\Product", "product_id", "id");
}
public function pendingProduct()
{
return $this->belongsTo("\\App\\Models\\PendingProduct", "target_product_id", "target_product");
}
}
がコード:
$replaced_product_sku = Input::get("replaced_sku");
$new_product_sku = Input::get("new_sku");
$products = Product::with([
"userProduct" => function($q) {
$q->orderBy("updated_at", "asc");
}
])->where("product_status", "live")->get();
if (!$found_replaced = $products->where("item_sku", $replaced_product_sku)->first()) {
return redirect("admin/content")
->with("danger", "Replaced product was not found.");
}
if (!$found_new = $products->where("item_sku", $new_product_sku)->first()) {
return redirect("admin/content")
->with("danger", "The new featured product was not found.");
}
$found_replaced->userProduct->is_featured = 0;
$found_replaced->userProduct->is_hidden_from_latest = 1;
$found_new->userProduct->is_featured = 1;
$found_new->userProduct->is_hidden_from_latest = 0;
$found_replaced->userProduct->save();
$found_new->userProduct->save();
return redirect("admin/content")
->with("...", "...");
save()
の代わりにpush()
メソッドを使用しようとしましたが、実行は$found_replaced->userProduct->save();
で終了し、空白のページが表示されます。また、次のようなものを試してみてください:
$found_replaced->update([
"userProduct.is_featured" => 0,
"userProduct.is_hidden_from_latest" => 1
]);
$found_new->update([
"userProduct.is_featured" => 1,
"userProduct.is_hidden_from_latest" => 0
]);
しかしまだ成功していません。
関係は大丈夫です、私は現在持っている関係ですべて正常に動作します。 SQLSTATE [42S22]:列が見つからない:1054不明なカラム 'where句'の中のuser_product.id(SQL:select * 'user_product'から' user_product'.id'の 'updated_at'による)' – Eseth
あなたの 'products'と 'user_products'テーブルを表示できますか? –
確かに、ここにMySQL Workbenchのスクリーンショットがあります:http://i.imgur.com/ou6HTk0.png – Eseth