2015-02-27 4 views
0

im пытается сделать выбор для администратора, чтобы выбрать, в каком порядке показывать категории на веб-сайте.mysql_num_rows in laravel 5

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

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

, так что я сделал что-то вроде этого на мой контроллер:

/* 
* Category order - down 
*/ 
public function down($id) 
{ 

    $cat = Cat::findOrFail($id); 

    $new_location = $cat->location + 1; 

    $num_cats = count(Cat::all()); //number of cats 
    //die($num_cats); 
    if ($new_location >= $num_cats) 
    { 
     return Redirect::route('pages')->with('msg', 'it is allready the last category'); 
    } 

    $cat->where('location', '=', $new_location)->update(['location' => $cat->location]); //moving the old category 
    $cat->where('id', '=', $id)->update(['location' => $new_location]); //updating the new location 

    return Redirect::route('pages')->with('msg', 'the cat has been updated'); 
} 

но $ num_cats превращается в нуль.

любые идеи, как я могу получить количество всех моих категорий?

EDIT: Модель

class Cat extends Model { 
    public $timestamps = false; 
    protected $fillable = array('name', 'location', 'slug'); 

    /* 
    * A categorey has many pages 
    */ 
    public function pages() { 
     return $this->hasMany('App\Page')->where('solo', '!=', 1); 
    } 
} 

благодарит

+0

Коллекция, которая возвращается из всего метода, имеет на ней метод подсчета. 'Cat :: all() -> count()' –

+0

Я изменил его и по-прежнему возвращает null. – amf

+0

Есть ли какие-либо результаты, полученные от вашего all()? Вы можете попробовать 'Cat :: get() -> count()', то же самое, просто используя get вместо этого. –

ответ

0

Вы можете использовать любое из этого, чтобы получить отсчеты:

$num_cats = count(Cat::all()); 

или

$num_cats = Cat::all()->count(); 

или

$num_cats = count(Cat::all()->toArray()); 
1

Предлагаем Вам сделать граф как этот $num_cats = Cat::count();

Поскольку возвращение Cat::all() является объектом Illuminate\Database\Eloquent\Collection

Вы должны знать, рассчитывать функция int count (mixed $array_or_countable [, int $mode = COUNT_NORMAL ])

И

Cat::count(); SQL: SELECT count(*) as aggregate FROM "cats"; Нужно меньше памяти.

Cat::all()->count(); SQL: SELECT * FROM "cats"; Нужно больше памяти.

+0

не работает, поэтому я попытался ' $ num_cats = Cat :: все() -> элементы; ' и я получаю эту ошибку: ' не удается получить доступ к защищенной собственности Illuminate \ Database \ Eloquent \ Collection :: $ items' – amf

+0

@amf о, извините. 'items' является защищенным свойством,' Collection :: all() 'вернет его. Посмотрите [здесь] (https://github.com/laravel/framework/blob/5.0/src/Illuminate/Support/Collection.php#L15-L54). Если вы хотите получить счет ТОЛЬКО, используйте '$ num_cats = Cat :: count()'. – zhuzhichao

+0

, так что это та же проблема, что и у меня ... она возвращает нулевое значение. – amf