2017-02-16 4 views
0

У меня есть класс под названием shoppingCart, и я бы хотел определить массив внутри него. Но мне кажется, мне нужно вручную создать экземпляр массива для его использования. Я уверен, что есть способ, но я могу найти его Моего торгового графика классОпределение массива внутри класса в php/laravel

namespace App; 

use Illuminate\Database\Eloquent\Model; 
use App\Product; 

class shoppingChart extends Model 
{ 
    var $products = Array(); 
    var $productCount=0; 

    public function ItemCount(){ 
     return count($products); 
    } 
} 

Когда я пытаюсь использовать я получаю нулевой указатель exceptionn и я проверил Когда N это $ продуктов Безразлично `кажется в списке переменных.

array_push($sc->products, "test"); 

Я могу сделать это, как показано ниже. Когда я использую массив. Работает отлично.

public function addToBasket(Request $request) 
{ 
    $product = new Product(); 
    $product->id = Input::get('product_id'); 


    if($request->session()->has('shoppingCart')){ 
     $sc = $request->session()->get('shoppingCart'); 
     $sc->products = Array(); // If i remove this line code doesn`t work 
     array_push($sc->products,$product); 
     $sc->productCount=$sc->itemCount(); 
    } 
} 

Должен ли я инициировать массив каждый раз, когда я его использую? Не имеет для меня никакого смысла.

+1

Вы забыли свой аксессуар: сделайте переменную класса общедоступной, если хотите получить доступ к ней извне. –

+0

делите больше кода, где вы используете 'array_push ($ sc-> products," test ");'? – C2486

+0

Являетесь ли вы '$ products' массивом и массивом объектов' Product', связанных с объектом 'ShoppingCart'? или это просто для хранения идентификатора продукта, прежде чем вы свяжете его с корзиной покупок? – Spholt

ответ

0

Не зная больше о архитектуре вашего приложения, я не могу вдаваться в подробности, но у меня такое ощущение, что вам может и не понадобиться этот массив.

Если вы ищете ShoppingCart, у вас есть много Product, а затем попробуйте использовать красноречивое отношение «Многие ко многим», используя отношения \Illuminate\Database\Eloquent\Relations\HasMany.

https://laravel.com/docs/5.4/eloquent-relationships#many-to-many

Имея эти отношения вы будете иметь возможность получить все продукты, связанные с вами телеге, идя $cart->products который будет возвращать красноречивый Collection продуктов, связанных с тележкой.

Смежные вопросы