国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

在Laravel外使用Eloquent(二)- 分頁問題

junfeng777 / 1724人閱讀

摘要:在上一篇在外使用一中我們演示了如何引入以及基本使用,但是如果細心的朋友肯定會發現,當你在使用來分頁的時候是會報錯的。但是引入那個模塊同時它內部依賴了的模塊,意味著為了一個分頁功能我們要裝好多東西。

在上一篇《在Laravel外使用Eloquent(一)》 中我們演示了如何引入Eloquent以及基本使用,但是如果細心的朋友肯定會發現,當你在使用paginate(15)來分頁的時候是會報錯的。因為我們沒有依賴laravel的pagination模塊。但是引入那個模塊同時它內部依賴了symfony的http-foundation模塊,意味著為了一個分頁功能我們要裝好多東西。于是我就實現了一個比較簡單的分頁類:

代碼見:https://github.com/overtrue/rester

php
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 *
 * @author overtrue 
 * @github https://github.com/overtrue
 * @url    http://overtrue.me
 * @date   2014-10-23T20:05:33
 */

use Closure;
use Countable;
use ArrayAccess;
use Serializable;
use ArrayIterator;
use JsonSerializable;
use IteratorAggregate;

class Paginator implements
    ArrayAccess,
    Countable,
    IteratorAggregate,
    Serializable,
    JsonSerializable
{
    protected $pager;
    protected $pageSize;
    protected $total;
    protected $items;

    /**
     * Constructor
     *
     * @param string             $pager
     */
    public function __construct($pager = "page")
    {
        $this->pager = $pager;
    }

    /**
     * Make a pagination
     *
     * @param array   $items
     * @param integer $total
     * @param integer $pageSize
     *
     * @return array
     */
    public function make($items, $total, $pageSize = 10)
    {
        $this->total    = abs($total);
        $this->pageSize = $pageSize;
        $this->items = $items;

        return $this;
    }

    /**
     * Return current page
     *
     * @return integer
     */
    public function getCurrentPage($total = null)
    {
        $page = abs(app()->request->get("page", 1));

        if ($total) {
            $this->total = $total;
        }

        $page >= 1 || $page = 1;

        if ($this->items) {
            $totalPage = $this->getTotalPage();
            $page <= $totalPage || $page = $totalPage;
        }

        return $page;
    }

    /**
     * Return total pages
     *
     * @return integer
     */
    public function getTotalPage()
    {
        $this->pageSize > 0 || $this->pageSize = 10;

        $totalPage = ceil($this->total / $this->pageSize);

        $totalPage >= 1 || $totalPage = 1;

        return $totalPage;
    }

    public function links()
    {
        $html = "
    "; $totalPage = $this->getTotalPage(); $currentPage = $this->getCurrentPage(); if ($totalPage < 10) { for ($i = 1; $i <= $totalPage; $i++) { $active = $i == $currentPage ? "class="active"":""; $html .= "
  • $i
  • "; } } else { if ($currentPage > 3) { $html .= "
  • «
  • "; $start = $currentPage - 2; } else { $start = 1; } for ($i = $start; $i <= $currentPage; $i++) { $active = $i == $currentPage ? "class="active"":""; $html .= "
  • $i
  • "; } for ($i = $currentPage + 1; $i <= $currentPage + 3; $i++) { $active = $i == $currentPage ? "class="active"":""; $html .= "
  • $i
  • "; } if ($totalPage - $currentPage >= 5) { $html .= "
  • ...
  • "; $html .= "
  • $totalPage
  • "; } } return $html .= "
"; } /** * getLink * * @param integer $page * * @return string */ public function getLink($page) { static $query; if (is_null($query)) { $query = app()->request->get(); } $query["page"] = $page; return "?" . http_build_query($query); } /** {@inhertDoc} */ public function jsonSerialize() { return $this->items; } /** {@inhertDoc} */ public function serialize() { return serialize($this->items); } /** {@inhertDoc} */ public function unserialize($data) { return $this->items = unserialize($data); } /** {@inhertDoc} **/ public function getIterator() { return new ArrayIterator($this->items); } /** {@inhertDoc} */ public function count($mode = COUNT_NORMAL) { return count($this->items, $mode); } /** * Get a data by key * * @param string $key * * @return mixed */ public function __get($key) { return $this[$key]; } /** * Assigns a value to the specified data * * @param string $key * @param mixed $value * * @return void */ public function __set($key, $value) { $this->items[$key] = $value; } /** * Whether or not an data exists by key * * @param string $key * * @return bool */ public function __isset($key) { return isset($this->items[$key]); } /** * Unsets an data by key * * @param string $key */ public function __unset($key) { unset($this->items[$key]); } /** * Assigns a value to the specified offset * * @param string $offset * @param mixed $value * * @return void */ public function offsetSet($offset, $value) { $this->items[$offset] = $value; } /** * Whether or not an offset exists * * @param string $offset * * @access public * * @return bool */ public function offsetExists($offset) { return isset($this->items[$offset]); } /** * Unsets an offset * * @param string $offset * * @return array */ public function offsetUnset($offset) { if ($this->offsetExists($offset)) { unset($this->items[$offset]); } } /** * Returns the value at specified offset * * @param string $offset * * @return mixed */ public function offsetGet($offset) { return $this->offsetExists($offset) ? array_get($this->items, $offset) : null; } } ``` 然后在我們初始化eloquent的方裝載這個分頁類到eloquent中就好: ```php //... use ResterPaginator; // 注冊分頁類 Capsule::setPaginator(function() use ($app, $config) { return new Paginator($app->request, $config->get("pager", "page")); }); //... ``` 完整的eloquent初始化步驟請參考: https://github.com/overtrue/rester/blob/master/start/eloquent.php 然后我們就可以正常使用分頁功能了: ```php $users = User::paginate(15); $users = User::where("status", 1)->paginate(15); ... ``` 因為上面的分頁類實現了常用的[預定義接口](http://php.net/manual/zh/reserved.interfaces.php), 所以你可以很方便的使用分頁結果: ```php // 遍歷 foreach ($users as $user) { // do sth. } // json encode $json = json_encode($users); // count $count = count($users); //... ``` 另外還考慮到了大家不一定全用它寫接口用,所以分頁類同樣實現了Laravel里的生成分頁鏈接的方法:`$users->links()`, 它會生成bootstrap格式的分頁列表: ```html ``` demo: ```php
name; ?>
links(); ?>

OK,那么現在你就可以很方便的在你的項目里無憂的使用Eloquent啦。

  

原文: http://overtrue.me/2014/11/25/using-eloquent-outsite-laravel-2.html

  

上一篇:http://segmentfault.com/blog/overtrue/1190000002468218

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/31907.html

相關文章

  • laravel5.5手寫教程4Eloquent ORM分頁及軟刪除

    摘要:從而達到了軟刪除。不過,你可以通過在查詢中調用方法來強制查詢已被軟刪除的模型方法也可以被用在關聯查詢只取出軟刪除數據會只取出軟刪除數據恢復被軟刪除的模型有時候你可能希望取消刪除一個已被軟刪除的模型。 Laravel 有三寶,路由、容器和 Eloquent ORM,Eloquent ORM。我個人一直比較推薦于在實際操作中學習,之前簡單了解了路由和Eloquent ORM的基本用法,今天...

    mindwind 評論0 收藏0
  • 【整理】LaravelEloquent ORM 相關操作

    摘要:軟刪除當模型被軟刪除后,它們并沒有真的從數據庫刪除,而是在模型上設置一個屬性并插入數據庫,如果模型有一個非空值,那么該模型已經被軟刪除了。 Laravel 中Eloquent ORM 相關操作 定義 操作 獲取(查詢) 獲取集合,(查詢列表) 返回值是 IlluminateDatabaseEloquentCollection 的一個實例 獲取所有的數據 use AppUser; $us...

    dongfangyiyu 評論0 收藏0
  • Lumen 初體驗(

    摘要:的現狀目前是版本,是基于開發。入口文件啟動文件和配置文件框架的入口文件是。在路由中指定控制器類必須寫全命名空間,不然會提示找不到類。目前支持四種數據庫系統以及。使用時發生錯誤,因為在文件中,的默認驅動是。 最近使用 Lumen 做了 2 個業余項目,特此記錄和分享一下。 Lumen 的介紹 在使用一項新的技術時,了解其應用場景是首要的事情。 Lumen 的口號:為速度而生的 La...

    Cheriselalala 評論0 收藏0
  • laravel手動創建數組分頁

    摘要:目前,無法高效執行使用語句的分頁操作。如果你需要在分頁結果集中使用,建議你查詢數據庫并手動創建分頁器。手動創建分頁如果你想手動創建分頁實例并且最終得到一個數組類型的結果,可以根據需求來創建或者實例來實現。 showImg(https://segmentfault.com/img/bVbbGos?w=640&h=400); laravel分頁功能: 有幾種方法可以對數據進行分頁。最簡單的...

    acrazing 評論0 收藏0
  • Laravel 5.7 正式發布,同時啟動中文翻譯

    摘要:版本現在正式發布了,每個人都可以使用。該版本引入了一些新特性并修復了很多,改進超過了版本。我們正在翻譯中文文檔,這是個系統性學習的好機會,感興趣的同學請前往 showImg(https://segmentfault.com/img/remote/1460000016281269); 「Laravel 5.7?」版本現在正式發布了,每個人都可以使用。該版本引入了一些新特性并修復了很多 b...

    Yujiaao 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<