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)
有什么办法可以实现吗?
非常感谢
即使我想知道这背后的原因是什么,你可以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.