Eloquent模型默认添加额外列

Tho*_*son 4 php sql laravel eloquent

我有一个名为的模型Book,我想在默认的SQL中添加一个额外的列.

目前默认的sql如下所示:

SELECT * FROM `books`
Run Code Online (Sandbox Code Playgroud)

但我希望默认的SQL看起来像这样:

SELECT *, "Hello" as `greeting` FROM `books`
Run Code Online (Sandbox Code Playgroud)

这样我就可以做到以下几点:

// in a controller function...
$book = Book::find(1);
echo $book->greeting; // Hello

$books = Book::all();
foreach($books as $book){
    echo $book->greeting; // Hello
}
Run Code Online (Sandbox Code Playgroud)

有什么办法可以实现吗?

非常感谢

luk*_*ter 7

即使我想知道这背后的原因是什么,你可以newQuery在模型中覆盖

public function newQuery(){
    $query = parent::newQuery();
    return $query->selectRaw('*, "Hello" AS greeting');
}
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用范围:

public function scopeWithGreeting($query){
    return $query->selectRaw('*, "Hello" AS greeting');
}
Run Code Online (Sandbox Code Playgroud)

用法:

$book = Book::withGreeting()->find(1);
Run Code Online (Sandbox Code Playgroud)

如果您确实每次都想要范围,则可以使用全局范围,这样您就不必一直打电话withGreeting.