Laravel的优势之一是其优雅的语法。 如果您在Laravel中有很多模型和关系(由于数据库中有很多表),则遍历通常会以不太优美的代码结尾。 随着时间的流逝,三个小扩展已经为我证明了自己,我在下面简要介绍一下。 我们只使用一些继承,魔术方法和自定义集合。
首先,我们在app \ ConvenienceModel.php下创建一个新模型:
b45e29b9125c2ab565b5526442437686
然后,让所有模型都从新的ConvenienceModel继承:
b45e29b9125c2ab565b5526442437686
将自己的功能与关系混合在一起
如果要连接模型,请使用标准语法来调用它们:
b45e29b9125c2ab565b5526442437686
如果现在添加自己的业务逻辑,那么您将喜欢使用(小写的)驼峰表示法:
b45e29b9125c2ab565b5526442437686
我们要标准化两个变体的语法。 为此,我们将魔术方法__call添加到ConvenienceModel:
b45e29b9125c2ab565b5526442437686
因此,在上面的示例中也可以进行此调用:
b45e29b9125c2ab565b5526442437686
检查空物体
如果要将国家名称输出到某人的地址,通常会看到以下代码:
b45e29b9125c2ab565b5526442437686
为了防止这种情况,我们包括的StringHelper图书馆和返回的空类空的特殊对象,如果没有找到一个模型:
b45e29b9125c2ab565b5526442437686
这也使呼叫成功(在此示例中,如果找到了内容,则输出国家/地区的名称,在所有其他情况下为空字符串)。
b45e29b9125c2ab565b5526442437686
如果我们也想解决ID 42用户甚至不存在的情况,我们还将为此构建一个小的辅助函数。:
b45e29b9125c2ab565b5526442437686
因此,即使用户根本不存在,以下调用也会传递一个空字符串:
b45e29b9125c2ab565b5526442437686
方便地遍历n:m关系
最后,我们要简化以下代码:
b45e29b9125c2ab565b5526442437686
为此,我们使用自定义集合的可能性。 我们首先扩展便利模式:
b45e29b9125c2ab565b5526442437686
然后,我们创建文件app \ Helpers \ ConvenienceCollection.php应用程序,以确保调用集合中的未知函数对集合中的所有项目执行该函数。:
b45e29b9125c2ab565b5526442437686
因此,我们可以使用以下代码输出此人所有父母的所有地址的所有国家/地区的所有名称:
b45e29b9125c2ab565b5526442437686
但是也可以进行如下调用:
b45e29b9125c2ab565b5526442437686
按多列排序
以下调用仅按位置排序,尽管这可能不是您想要的:
b45e29b9125c2ab565b5526442437686
我们正在扩展ConvenienceCollection以启用按多列排序:
b45e29b9125c2ab565b5526442437686
这样我们可以根据几个列对集合进行排序:
b45e29b9125c2ab565b5526442437686
标准分类
我们正在用另一个辅助功能扩展ConvenienceCollection:
b45e29b9125c2ab565b5526442437686
现在,您可以为每个模型提供单独的标准排序功能:
b45e29b9125c2ab565b5526442437686
所以我们可以用:
b45e29b9125c2ab565b5526442437686
对象名称
每个模型都实现getLabel方法(getName随模型而异):
b45e29b9125c2ab565b5526442437686
这样,您可以快速轻松地输出对象的名称。 然后,您可以在ConvenienceCollection中实现sortByLabel帮助器方法:
b45e29b9125c2ab565b5526442437686
空结果
如果中间步骤为空,则Laravel函数first()和last()通常返回零。 因此,我们引入了getFirst()和getLast(),以便以下调用始终成功:
b45e29b9125c2ab565b5526442437686
有了这个,我们送回__x识别的__empty_helper:
b45e29b9125c2ab565b5526442437686