13. Laravel 4 Eloquent 基礎

建立 Eloquent 模型

class User extends Eloquent {}

注意: 表名將默認爲:類名的複數形式並小寫。主鍵將默認爲: id數據庫

自定義表名(protected $table)

protected $table = 'my_users';

自定義主鍵(protected $primaryKey)

protected $primaryKey = 'not_id';

關閉自遞增(protected $incrementing)

protected $incrementing = false;

關閉 建立時間 與 更新時間 的自動維護(protected $timestamps)

protected $timestamps = false;

注意 在默認狀況下須要在表中定義 updated_atcreated_at 字段。若是不但願它們被自動維護,請在模型中設置 $timestamps 屬性爲 false數組

開啓軟刪除(protected $softDelete)

protected $softDelete = true;

自定義數據庫鏈接(protected $connection)

protected $connection = 'another';

查詢

在查詢中臨時改變數據庫鏈接(on)

User::on('connection-name')->find(1);

獲取全部數據(all|get)

User::all(); // 推薦使用,語義化
User::get();

使用主鍵檢索某一條數據(find)

User::find(1);

獲取結果中的第一條數據(first)

User::first();

根據主鍵獲取一條記錄或者拋出一個異常(findOrFail|firstOrFail)

User::findOrFail(1);
User::where('votes', '>', 100)->firstOrFail();

註冊錯誤處理器,請監聽 ModelNotFoundException:安全

use Illuminate\Database\Eloquent\ModelNotFoundException;
App::error(function(ModelNotFoundException $e)
{
    return Response::make('Not Found', 404);
});

指定須要獲取的字段(pluck)

User::all(array('url'));
User::get(array('url'));
User::find(1, array('url'));
User::find(1)->pluck('url');
User::first(array('url'));
User::first()->pluck('url');

列表形式獲取表中的某個字段值(lists)

User::lists('url');

能夠經過lists的第二個參數爲返回的數組自定義鍵名:函數

User::lists('url', 'id');

指定須要獲取的行數(take)

User::where('votes', '>', 100)->take(10)->get();

統計(count)

User::where('votes', '>', 100)->count();

自定義 where 語句(whereRaw)

User::whereRaw('age > ? and votes = 100', array(25))->get();

篩選重複(distinct)

User::whereRaw('age > ? and votes = 100', array(25))->distinct()->get();

插入

安全建立

$user = new User;
$user->name = 'John';
$user->save();

集體賦值

白名單(protected $fillable)

protected $fillable = array();

黑名單(protected $guarded)

protected $guarded = array();
阻止全部屬性集體賦值
protected $guarded = array('*');

使用模型的 Create 函數

// 常規方法
User::create(array('name' => 'John'));
// 若不存在則建立
User::firstOrCreate(array('name' => 'John'));
// 若不存在則建立,且容許你在 save 以前作其它操做
User::firstOrNew(array('name' => 'John'))->save();

更新

更新一個檢索到的模型

$user = User::find(1);
$user->email = 'john@foo.com';
$user->save();

push 操做

$user = User::whereRaw(" name = ? ", array('john'))->get();
$user->push(array('email' => 'john@foo.com'));
$user->save();

僅更新時間戳(touch)

$user->touch();

刪除

常規方法

$user = User::find(1);
$user->delete();
$affectedRows = User::where('votes', '>', 100)->delete();

根據主鍵刪除(destroy)

User::destroy(1);
User::destroy(array(1, 2, 3));
User::destroy(1, 2, 3);

軟刪除

使用條件

模型中開啓軟刪除:url

protected $softDelete = true;

表中必須添加 deleted_at 字段:rest

$table->softDeletes(); // 詳見結構生成器 Schema

使用方法

與刪除相同,只是數據並不是真的刪除,而是經過 deleted_at 字段標記。code

強制軟刪除的數據包含到結果集中(withTrashed)

User::withTrashed()->where('account_id', 1)->get();

僅取出軟刪除的數據(onlyTrashed)

User::onlyTrashed()->where('account_id', 1)->get();

檢測一個給定的模型實例是否被軟刪除(trashed)

if ($user->trashed())

恢復一個已被軟刪除的記錄(restore)

$user->restore();

完全刪除(forceDelete)

$user->forceDelete();

定製的時間戳格式

針對系統的自動維護三字段: created_at updated_at deleted_atorm

class User extends Eloquent {

    protected function getDateFormat()
    {
        return 'U';
    }

}

查詢範圍

定義一個查詢範圍

public function scopePopular($query)
{
    return $query->where('votes', '>', 100);
}

使用一個查詢範圍

User::popular()->orderBy('created_at')->get();

動態範圍

添加參數到您的範圍函數:rem

public function scopeOfType($query, $type)
{
    return $query->whereType($type);
}

而後在範圍函數調用中傳遞參數:get

User::ofType('member')->get();
相關文章
相關標籤/搜索