我用Google搜索我的手指疼,我不能见任何人讨论这个,但我有一个怀疑,LaravelssyncWithoutDetaching()方法没有考虑像额外的数据的任何参数save(),sync()并且attach()呢?
有人知道这个吗?在 API 文档中,该方法具有以下参数:
array syncWithoutDetaching(Collection|Model|array $ids)
I have trouble adding existing data to a relationship between a Guest and an Event. I need to add status for the guests and what event they are attending, maybe attending or declined.
我基于Laravel创建一个项目,并具有以下表:companies,attributes和attribute_company用作attribute_company连接表companies和attributes数据透视表时的多对多关系。
我attribute_id从客户那里得到了一个数组,我需要获得完全具有整个属性的公司的结果。
我发现的唯一解决方案是将查询whereHas与whereIn内部结合在一起,如下所示:
Company::whereHas('attributes', function (Builder $query) use ($atts_ids) {
$query->whereIn('attribute_id', $atts_ids);
})->get();
Run Code Online (Sandbox Code Playgroud)
companies如果attribute_id找到至少一个(不是我要查找的),则此查询将返回。
如果有人可以让我更清楚一点,那就太好了。
谢谢大家 :)
我有帖子、评论和通知表
每个帖子都有很多评论
每个评论都有很多通知
每个帖子都有很多通知
class Post extends Model
{
public function notifications() {
return $this->morphOne(Notification::class, 'to');
}
public function comments() {
return $this->hasMany(Comment::class, 'post_id');
}
public static function boot() {
parent::boot();
static::deleting(function($post) {
$post->comments()->delete();
$post->notifications()->delete();
});
}
}
Run Code Online (Sandbox Code Playgroud)
class Comment extends Model
{
public function notifications() {
return $this->morphOne(Notification::class, 'to');
}
public static function boot() {
parent::boot();
static::deleting(function($comment) {
$comment->notifications()->delete();
});
}
}
Run Code Online (Sandbox Code Playgroud)
当我删除帖子时,我应该删除通知和评论,但问题是当我删除评论时,通知不会随之删除,当我直接删除评论但我需要删除评论时,它们会被删除删除帖子时评论的通知!
在 Laravel 中遇到一个奇怪的问题。一切正常,数据库正常工作正常读/写操作和常规雄辩查询。但是当我使用
$query->whereHas('some_related_model',function($q){
$q->whereIn('column_on_related_model_table',[array_values]);
})
Run Code Online (Sandbox Code Playgroud)
它给出了连接拒绝错误,如我正在使用的标题中所示laravel 6.x,mySql 8.0并且php v7.4
我在上面写了一个通用代码。它发生在每个地方都有特殊的逆关系,例如BelongsTo
我目前正在研究 laravel 框架,但我遇到了一些关系和急切的加载问题。
我有三个模型 A、B 和 C
我有两个关系
默认情况下(使用模型中的 $with 属性):
所以大部分时间我都使用 A 不带 B 和 B 带 C
这是我设置关系方法和急切加载的方式
class A extends Model {
...
protected $with = [];
public function bs() {
return $this->hasMany('App\Models\B');
}
}
class B extends Model {
...
protected $with = ['cs'];
public function cs() {
return $this->hasMany('App\Models\C');
}
public function a() {
return $this->belongsTo('App\Models\A');
}
}
class C extends Model {
...
public function …Run Code Online (Sandbox Code Playgroud) 当我们通过 Eloquent 关系模型插入或更新数据时,最好使用哪种方法?
例子
$user->profile->update(['salary' => 5000]);
vs
$user->profile()->update(['salary' => 5000]);
Run Code Online (Sandbox Code Playgroud)
我明白那个
我不知何故记得我看到有人推荐使用$user->profile->update()而不是$user->profile()->update()但我找不到文章或参考链接了
但是,我发现如果$user->profile为null,那么它可能会导致错误,例如
Call to a member function update() on null
那么一直使用关系函数更新会不会更方便呢?
$user->profile()->create()
$user->profile()->update()
$user->profile()->save()
$user->profile()->delete()
Run Code Online (Sandbox Code Playgroud)
有什么情况我们应该使用$user->profile->save()来代替吗?
或者当它处于多重嵌套关系时应该使用它吗?
$user->profile->bank()->create()
$user->profile()->bank()->create()
Run Code Online (Sandbox Code Playgroud)
参考链接(出于我自己的理解)
目前,将在应用程序中使用下面的代码,两者都会触发事件
if ($user->bank === null) {
$user->bank()->save(new UserBankAccount($input)); // trigger created event
// $user->bank()->create($input);// trigger created event
} else {
$user->bank->update($input); // trigger updated event
// $user->bank()->update($input); …Run Code Online (Sandbox Code Playgroud) 怎样才能实现这个查询?
Sale::with(['catalog'])
->whereIn('id', $ids)
->update(['price' => DB::raw('catalog.price')]);
Run Code Online (Sandbox Code Playgroud)
这不起作用,它显示未定义的表......我试图输入表的名称,但它是相同的。
在互联网上,我总能找到简单的查询:
Sale::with(['catalog'])
->whereIn('id', $ids)
->update(['price' => 5]);
Run Code Online (Sandbox Code Playgroud)
好的!当我想用相同的值更新所有行时很容易,另外当你想用同一个表的列更新时也很容易,比如:
Sale::with(['catalog'])
->whereIn('id', $ids)
->update(['price' => DB::raw('price_alternative')]);
Run Code Online (Sandbox Code Playgroud)
但是如何使用具有关系的另一个表的列呢?我还没有找到解决方案。
我知道这可以使用整个原始查询来解决,但我想知道是否可以通过雄辩的方式来实现
我有 3 个模型“类别”、“帖子”和“用户”。Category 与 Post 具有 hasMany 关系。并且Post与User有belongsTo关系。
我有一个 Category 对象$cat1,我可以在我的视图中访问它的帖子(和 user_id),但我无法访问更多用户数据(行名称)
@foreach ($cat1->posts as $post)
{{ $post->title }}
{{ $post->user()->name }}
@endforeach
Run Code Online (Sandbox Code Playgroud)
这会引发错误
未定义的属性: Illuminate\Database\Eloquent\Relations\BelongsTo::$name
在阅读 Laravel 文档时,我遇到了一个名为freshand的方法,该方法refresh基于 Eloquent 模型。请解释它们之间的主要区别?我很难理解这些。
Laravel/Eloquent 新手在这里。我正在实现一个简单的棋盘游戏。每场比赛有 4 名玩家。表结构由 Players 表和 Games 表组成:
SELECT * FROM players;
id | name |
---------------------
1 | John |
2 | Mary |
3 | Linda |
4 | Alex |
5 | Chris |
6 | Ron |
7 | Dave |
Run Code Online (Sandbox Code Playgroud)
SELECT * FROM games;
id | player1_id | player2_id | player3_id player4_id
---------------------------------------------------------------------
1 | 1 | 2 | 3 | 4
2 | 3 | 5 | 6 | 7
3 | 2 | …Run Code Online (Sandbox Code Playgroud) 我有一个新的 Laravel 5.8 应用程序。我开始使用 Eloquent ORM 及其关系。
我马上就遇到了一个问题。
我有以下表格。(这只是一个示例,出于测试原因,不会成为实际应用程序)
Login table:
--------------------------
| id | user | data_id |
--------------------------
| 1 | admin | 1 |
| 2 | admin | 2 |
| 3 | admin | 3 |
--------------------------
Data table:
--------------
| id | ip_id |
--------------
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
--------------
IP table:
----------------------
| id | ip |
----------------------
| 1 | 192.168.1.1 …Run Code Online (Sandbox Code Playgroud) 我想在Laravel Product模型中添加一个方法,该方法按nameattr 过滤并返回所有匹配产品的集合,这就是我得到的:
public function filterByName($query)
{
return $this->where('name','LIKE','%'.$query.'%')->get();
}
Run Code Online (Sandbox Code Playgroud)
$products = collect(new Product);
$products->filterByName($name);
Run Code Online (Sandbox Code Playgroud)
正确的用法是什么?我需要使用QueryFilter吗?
我在Laravel Eloquent中有两个表:
UserCategory:
id | user | category
Run Code Online (Sandbox Code Playgroud)
和
Category:
id | name
Run Code Online (Sandbox Code Playgroud)
UserCategories与类别低谷所属到:
class UserCategory extends Model
{
public function category()
{
return $this->belongsTo('App\Category', 'category');
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试获取带有类别的UserCategories时,我得到了整数值(而不是Category模型)
$categories = [];
$userCategory = UserCategory::where('user', $user->id)->with('category')->get();
foreach($userCategory as $item) {
$categories[] = $item->category->name;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试获取类别名称时,看到第二个错误:
试图获取非对象的属性“名称”
奇怪的是,当我使用时,dd($item)我看到$ item与Category对象具有正确的关系,但是 dd($item->category)返回整数值(类别ID)而不是类别模型。