【发布时间】:2015-04-04 04:28:39
【问题描述】:
我有一个名为 Book 的模型,我想在默认 SQL 中添加一个额外的列。
目前默认的sql是这样的:
SELECT * FROM `books`
但我希望默认 SQL 看起来像这样:
SELECT *, "Hello" as `greeting` FROM `books`
这样我就可以做到以下几点:
// in a controller function...
$book = Book::find(1);
echo $book->greeting; // Hello
$books = Book::all();
foreach($books as $book){
echo $book->greeting; // Hello
}
有什么方法可以实现吗?
非常感谢
【问题讨论】:
-
你为什么不把它添加到类定义本身而不是假装它来自 SQL 动态?从本质上讲,您似乎会将属性隐藏在真正应该定义的地方。
-
这是一个简化的例子。我想要做的实际上是为我的模型添加一个新的
score属性。score属性计算为另一个表中的投票总和。生成的 SQL 非常复杂,我不希望它影响问题,即如何向模型的默认查询添加额外的 SQL 列。 -
为什么不为此目的将书籍模型与乐谱模型相关联?如果您在问题中实际解释了该用例,您也可能会得到与您的实际用例更相关的答案。
-
一本书的分数计算为
votes表中vote_amount列的总和(一本书可能有很多票)。我想要做的是能够最终做这样的事情:Book::orderBy('score', 'asc')->get()。我找不到通过关系来做到这一点的方法。 -
你会在每个模型中定义 hasMany 和 hasOne 关系,然后你会做类似
Book::find(1)->scores()->groupBy('book_id')->get(arrat('field1', 'field2', DB::RAW('SUM(score)'));