如何解决(尝试获取非对象的属性)错误,但是相同的功能在另一个功能中效果很好
此控制器出了什么问题,在更新顺序时我总是会收到此错误 “试图获取非对象的属性”,(请注意,我正在使用相同的功能进行存储,并且效果很好。
我的数据库中有4个表(user_type_id,users,产品和订单,orders表包含4列(id,product_id,user_id和qty),user_id和product_id =用户和产品表的外键。
我还想要一些我不知道如何正确写的东西,我希望当客户删除一个订单(只有一个订单(数量= 1))时,要永久删除,并且如果他输入相同的数量,被永久删除也是因为当我测试此功能时,我发现它一直删除直到-1 -2 -3等。
,并且我想要产品数量是否为0,以便为所有用户隐藏该产品,但管理员和出售该产品的卖方除外,或者至少隐藏全部的“添加到购物车”按钮,或将其替换为无库存的失效按钮而不是“添加到购物车”,并且如果用户已经订购了某些产品,他将无法更新数量但可以取消数量,那么它将再次添加到产品中。
,我希望有人告诉我如何使用注释的跨度,因为我也不知道该怎么做:D 谢谢
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Order;
use App\Product;
use Auth;
use App\User;
use App\Details;
use Validator;
class OrderController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function myorders()
{
$orders = Order::where('user_id','=',Auth::user()->id)->orderBy('id','desc')->get();
return view('order.myorders',compact('products','orders','users'));
}
public function buy(Request $id)
{
$product = Product::find($id);
return view('product.index',compact('product','order','user'));
}
public function store(Request $request, $id)
{
$validator = Validator::make($request->all(), [
'qty' => 'required|max:255',
]);
if ($validator->fails()) {
return redirect('')
->withErrors($validator)
->withInput();
}
$product = Product::find($id);
$order = new Order();
$order->user_id = Auth::user()->id;
$order->product_id = $id;
$order->qty = $request['qty'];
$product->inv = $product->inv - $order->qty;
$order->save();
$product->save();
return redirect('/');
}
public function edit(Request $id)
{
$product = Product::find($id);
return view('order.myorders',compact('product','order','user'));
}
public function update(Request $request, $id)
{
$validator = Validator::make($request->all(), [
'qty' => 'required|max:255',
]);
if ($validator->fails()) {
return redirect('')
->withErrors($validator)
->withInput();
}
$product = Product::find($id);
$order = new Order();
$order->user_id = Auth::user()->id;
$order->product_id = $id;
$order->qty = $request['qty'];
this line $product->inv = $product->inv - $order->qty; (it works in store)
$order->save();
$product->save();
return redirect('/myorders');
}
public function delete($id)
{
$order = Order::find($id);
return view('order.myorders',compact('product','order','user'));
}
public function destroy(Request $request, $id)
{
$validator = Validator::make($request->all(), [
'qty' => 'required|max:255',
]);
if ($validator->fails()) {
return redirect('')
->withErrors($validator)
->withInput();
}
$order = Order::find($id);
$product= Product::find($order->product_id);
$order->qty = $order->qty - $request->input('qty');
$product->inv = $product->inv + $order->qty;
$product->save();
$order->save();
return redirect('/myorders');
}
}
这是路线文件
Route::get('/myorders', 'OrderController@myorders');
Route::get('/add_order', 'OrderController@buy');
Route::get('/add_order/{id}', 'OrderController@store');
Route::get('/update_order', 'OrderController@edit');
Route::get('/update_order/{id}', 'OrderController@update');
Route::get('/delete_order', 'OrderController@delete');
Route::get('/delete_order/{id}', 'OrderController@destroy');
这是我的观点,我在
中使用它<div class="klaviyo_modal" id="update_order_qty" style="display:none;">
<div class="klaviyo_inner">
<a href="Cancel" class="klaviyo_close_modal klaviyo_header_close">×</a>
<form method="GET" action="/update_order/{{ $order['id'] }}" enctype="multipart/form-data">
{{ csrf_field() }}
<p class="klaviyo_header">Please update quantity as you need, then order it.</p>
<div class="klaviyo_fieldset">
<div class="{{ $errors->has('qty') ? ' has-error' : '' }}">
<label for="qty" style="display:block;text-align:center;margin-bottom:25px">Ordered New Quantity will be ADDED to your CURRENT Order Quantity</label>
<input type="number" id="qty" class="qty" name="qty" style="display:block;margin:auto" required="required" placeholder="CURRENT Quantity">
@if ($errors->has('qty'))
<span class="help-block">
<strong style="display:block;text-align:center">{{ $errors->first('qty') }}</strong>
</span>
@endif
</div>
</div>
<div class="klaviyo_fine_print"></div>
<div class="klaviyo_form_actions">
<button type="submit" class="klaviyo_submit_button">
<span>Update Order Quantity Now</span>
</button>
</div>
<!-- <span class="help-block">
<div class="success_message" style="display: block; text-align:center">Order Updated Successfully</div><br>
</span>
<span class="help-block">
<strong class="error_message" style="display: block; text-align:center">Sorry, Product Out of Stock, Try again later</strong>
</span> -->
</form>
</div>
</div>
答案 0 :(得分:0)
所有使用function foo() {
return new Promise((resolve, reject) => {
doSomethingAsynchronous().then(resolve, reject);
});
}
的操作都被弄错了!
action(Request $id)
执行此操作的路线: public function buy(Request $id)
{
$product = Product::find($id);
return view('product.index',compact('product','order','user'));
}
$ id应该是Request类的对象。但是您尝试将其用作Route::get('/add_order', 'OrderController@buy');
中的整数。当然$ product变量为null!
答案 1 :(得分:0)
好,谢谢大家:),我修复了它,这是视图形式的动作:D
action="/update_order/{{ $order['id'] }}" , It should be action="/update_order/{{ $order->product->id }}"
,
现在:)
我想要一些我不知道如何正确写的东西,我希望当客户删除一个订单并且只有一个订单(数量= 1)时,要永久删除,并且如果他输入相同的数量,被永久删除也是因为当我测试此功能时,我发现它一直删除直到-1 -2 -3等。
,并且我想要产品数量是否为0,以便为所有用户隐藏该产品,但管理员和出售该产品的卖方除外,或者至少隐藏全部的“添加到购物车”按钮,或将其替换为无库存的失效按钮而不是“添加到购物车”,并且如果用户已经订购了某些产品,他将无法更新数量但可以取消数量,那么它将再次添加到产品中。
我希望有人告诉我如何使用注释的跨度,因为我也不知道该怎么做:D 再次感谢...