2017-03-02 4 views
0

関連するモデルの一部の値を更新しようとしましたが、新しい値を割り当てて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 
]); 

しかしまだ成功していません。

答えて

0

ソリューションは、このアプローチを使用していました:

UserProductモデルで

public function userProduct() 
{ 
    return $this->hasOne("\\App\\Models\\UserProduct", "product_id", "id"); 
} 

私は疑問に掲載しましたが、間違いが、私はそれが間違って使用していたということでしたので、私はこの中にそれを編集した、それがうまく働いた210

$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 
]); 

$found_replaced->userProduct()->update([ 
    "is_featured" => 0, 
    "is_hidden_from_latest" => 1 
]); 

$found_new->userProduct()->update([ 
    "is_featured" => 1, 
    "is_hidden_from_latest" => 0 
]); 

save()がちょうどdoesnのようです関係属性に対して期待どおりに動作しません。

どうもありがとうございました! ;)

0

まずあなたが関係を修正する必要があります。

製品モデルで:

public function product() 
{ 
    return $this->belongsTo("\\App\\Models\\Product", "product_id", "id"); 
} 
+0

関係は大丈夫です、私は現在持っている関係ですべて正常に動作します。 SQLSTATE [42S22]:列が見つからない:1054不明なカラム 'where句'の中のuser_product.id(SQL:select * 'user_product'から' user_product'.id'の 'updated_at'による)' – Eseth

+0

あなたの 'products'と 'user_products'テーブルを表示できますか? –

+0

確かに、ここにMySQL Workbenchのスクリーンショットがあります:http://i.imgur.com/ou6HTk0.png – Eseth

関連する問題