标签: eloquent-relationship

Laravel syncWithoutDetaching 和附加数据

我用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 eloquent eloquent-relationship laravel-5.8

6
推荐指数
1
解决办法
6723
查看次数

查询Laravel口才好很多,所有ID都相等

我基于Laravel创建一个项目,并具有以下表:companiesattributesattribute_company用作attribute_company连接表companiesattributes数据透视表时的多对多关系。

attribute_id从客户那里得到了一个数组,我需要获得完全具有整个属性的公司的结果。

我发现的唯一解决方案是将查询whereHaswhereIn内部结合在一起,如下所示:

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找到至少一个(不是我要查找的),则此查询将返回。

如果有人可以让我更清楚一点,那就太好了。

谢谢大家 :)

php laravel eloquent eloquent-relationship

6
推荐指数
1
解决办法
89
查看次数

在 laravel 中删除一行时删除所有关系

我有帖子、评论和通知表

每个帖子都有很多评论

每个评论都有很多通知

每个帖子都有很多通知

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)

当我删除帖子时,我应该删除通知和评论,但问题是当我删除评论时,通知不会随之删除,当我直接删除评论但我需要删除评论时,它们会被删除删除帖子时评论的通知!

php laravel eloquent eloquent-relationship

5
推荐指数
1
解决办法
5505
查看次数

SQLSTATE[HY000] [2002] 使用 whereHas 时 Laravel 中的连接被拒绝错误

在 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.xmySql 8.0并且php v7.4

我在上面写了一个通用代码。它发生在每个地方都有特殊的逆关系,例如BelongsTo

mysql pdo laravel eloquent eloquent-relationship

5
推荐指数
1
解决办法
148
查看次数

laravel eloquent - 不使用嵌套的急切加载关系

我目前正在研究 laravel 框架,但我遇到了一些关系和急切的加载问题。

情况

我有三个模型 A、B 和 C

我有两个关系

  • A有很多B
  • B 有很多 C

默认情况下(使用模型中的 $with 属性):

  • A不包括B
  • B 包括 C

所以大部分时间我都使用 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)

eager-loading laravel eloquent eloquent-relationship

5
推荐指数
1
解决办法
1464
查看次数

更新 Laravel 关系数据

当我们通过 Eloquent 关系模型插入或更新数据时,最好使用哪种方法?

例子

$user->profile->update(['salary' => 5000]);

vs
 
$user->profile()->update(['salary' => 5000]);
Run Code Online (Sandbox Code Playgroud)

我明白那个

  1. $user->profile() 将返回关系类,例如Illuminate/Database/Eloquent/Relations/HasOne
  2. $user->profile 将返回实际的 UserProfile 模型类

我不知何故记得我看到有人推荐使用$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)

laravel eloquent eloquent-relationship

5
推荐指数
1
解决办法
1万
查看次数

Laravel eloquent 使用关系列更新列

怎样才能实现这个查询?

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)

但是如何使用具有关系的另一个表的列呢?我还没有找到解决方案。

我知道这可以使用整个原始查询来解决,但我想知道是否可以通过雄辩的方式来实现

php laravel eloquent eloquent-relationship

3
推荐指数
1
解决办法
243
查看次数

Laravel - 如何访问相关对象其他关系

我有 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

php laravel eloquent laravel-5 eloquent-relationship

2
推荐指数
1
解决办法
1274
查看次数

Laravel 7.x:fresh 和 refresh 方法的区别?

在阅读 Laravel 文档时,我遇到了一个名为freshand的方法,该方法refresh基于 Eloquent 模型。请解释它们之间的主要区别?我很难理解这些。

laravel eloquent eloquent-relationship laravel-7

2
推荐指数
1
解决办法
3641
查看次数

Laravel 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)

php laravel eloquent eloquent-relationship

2
推荐指数
1
解决办法
3935
查看次数

对 Laravel 的 hasOne Eloquent 关系感到困惑

我有一个新的 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 eloquent laravel-5 eloquent-relationship

0
推荐指数
1
解决办法
3051
查看次数

向Laravel模型添加过滤器辅助方法

我想在Laravel Product模型中添加一个方法,该方法按nameattr 过滤并返回所有匹配产品的集合,这就是我得到的:

Product.php

public function filterByName($query)
{
    return $this->where('name','LIKE','%'.$query.'%')->get();
}
Run Code Online (Sandbox Code Playgroud)

ProductController.php

$products = collect(new Product);
$products->filterByName($name);
Run Code Online (Sandbox Code Playgroud)

正确的用法是什么?我需要使用QueryFilter吗?

php laravel eloquent eloquent-relationship laravel-5.8

0
推荐指数
1
解决办法
32
查看次数

Laravel“ with”没有填充相关模型

我在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)而不是类别模型。

php laravel eloquent eloquent-relationship

0
推荐指数
1
解决办法
34
查看次数